Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: вывести каталоги и файлы в алфавитном порядке
 
 автор: P@Sol   (31.07.2007 в 12:58)   письмо автору
 
 

есть таблица:
CREATE TABLE `ftpfile` (
`id` int(255) unsigned NOT NULL auto_increment,
`name` varchar(255) NOT NULL default '',
`id_ftp` int(255) NOT NULL default '0',
`id_parent` int(255) unsigned NOT NULL default '0',
`size` bigint(20) unsigned NOT NULL default '0',
`type` enum('0','1') NOT NULL default '0',

PRIMARY KEY (`id`)
) TYPE=MyISAM PACK_KEYS=0 AUTO_INCREMENT=1336 ;

у папок в поле size "-" //уже не так

INSERT INTO `ftpfile` VALUES (1, 'c', '4', 0, '0', '0');
INSERT INTO `ftpfile` VALUES (4, 'h7.net', '4', 0, '6', '1');
INSERT INTO `ftpfile` VALUES (5, 'h8.net', '4', 0, '6', '1');
INSERT INTO `ftpfile` VALUES (6, 'h9.net', '4', 0, '6', '1');
INSERT INTO `ftpfile` VALUES (7, 'hd1.ru', '4', 0, '6', '1');
INSERT INTO `ftpfile` VALUES (8, 'p1', '4', 0, '0', '0');
INSERT INTO `ftpfile` VALUES (9, 'p2', '4', 0, '0', '0');
INSERT INTO `ftpfile` VALUES (10, 't', '4', 0, '0', '0');
INSERT INTO `ftpfile` VALUES (14, 'v1', '4', 0, '0', '0');
INSERT INTO `ftpfile` VALUES (15, 'v2', '4', 0, '0', '0');
INSERT INTO `ftpfile` VALUES (16, 'w.pwd', '4', 0, '55', '1');
INSERT INTO `ftpfile` VALUES (17, 'w.bak', '4', 0, '55', '1');
INSERT INTO `ftpfile` VALUES (18, 'w', '4', 0, '0', '0');

я делаю
$sql = "Select * from ftpfile where id_parent = $id_parent order by size, name";
на экране
c
p1
p2
t
v1
v2
w
w.pwd-55 байт
w.bak-55 байт
h7.net-6 байт
h8.net-6 байт
h9.net-6 байт
hd1.ru-6 байт

:( - заранее знал, что код не верный, но другого не придумал (в один запрос). помогите


ТАБЛИЦА ИСПРАВЛЕНА!!!

   
 
 автор: Trianon   (31.07.2007 в 13:14)   письмо автору
 
   для: P@Sol   (31.07.2007 в 12:58)
 

прикольно наверное размер файла в varchar хранить?

Если Вы про беду с сортировкой - то ноги растут именно из этого места.
Ставьте BIGINT
И не нагружайте одно поле двумя ролями.
Отведите отдельное поле под признак каталога.

   
 
 автор: P@Sol   (31.07.2007 в 13:23)   письмо автору
 
   для: Trianon   (31.07.2007 в 13:14)
 

проблем с varchar нет, а вот новое поле решит мою проблему. и все же вы рекомендуете использовать поле типа integer? почему нельзя использовать текстовое поле?

   
 
 автор: Trianon   (31.07.2007 в 14:35)   письмо автору
 
   для: P@Sol   (31.07.2007 в 13:23)
 

потому Вы что укладываете туда, изымаете оттуда, сортируете согласно, сравниваете между собой именно числа, а не строки.

на мой взгляд, этот аргумент настолько убийственый, что тема такая вообще возникнуть не могла.

Если это не убеждает, я никак Вашего мнения изменить не смогу.

   
 
 автор: P@Sol   (31.07.2007 в 14:37)   письмо автору
 
   для: Trianon   (31.07.2007 в 14:35)
 

20 минут назад уже исправил:)

   
 
 автор: P@Sol   (31.07.2007 в 13:32)   письмо автору
 
   для: P@Sol   (31.07.2007 в 12:58)
 

запихну сюда и второй вопрос:
есть еще таблица:
CREATE TABLE `ftpserver` (
`id` int(10) unsigned NOT NULL auto_increment,
`ftp` varchar(15) NOT NULL default '',
`online` enum('0','1') NOT NULL default '0',
PRIMARY KEY (`id`)
) TYPE=MyISAM PACK_KEYS=0 AUTO_INCREMENT=5 ;

#
# Дамп данных таблицы `ftpserver`
#

INSERT INTO `ftpserver` VALUES (1, '10.0.0.1', '0');
INSERT INTO `ftpserver` VALUES (4, '10.0.0.4', '1');

как отсортировать нужные файлы по порядку по фтп?

делаю: SELECT *
FROM ftpfile
LEFT JOIN ftpserver ON ftpfile.id_ftp = ftpserver.id
AND ftpfile.name LIKE 'w.bak' ORDER BY ftp

не очень правильно работает - выводит все файлы

   
 
 автор: Faraon   (31.07.2007 в 13:56)   письмо автору
 
   для: P@Sol   (31.07.2007 в 13:32)
 

Что то я у Вас в таблице ftpfile не вижу столбец id_ftp

   
 
 автор: P@Sol   (31.07.2007 в 14:18)   письмо автору
 
   для: Faraon   (31.07.2007 в 13:56)
 

исправил и таблицу и строки

   
 
 автор: P@Sol   (31.07.2007 в 15:34)   письмо автору
 
   для: P@Sol   (31.07.2007 в 13:32)
 

есть мысли?

   
 
 автор: Faraon   (31.07.2007 в 15:51)   письмо автору
 
   для: P@Sol   (31.07.2007 в 15:34)
 

-

   
 
 автор: Faraon   (31.07.2007 в 15:52)   письмо автору
 
   для: P@Sol   (31.07.2007 в 15:34)
 

Если нужно сортировать по столбцу ftp, то я опять не вижу столбца

 ftp

соответствено и сортировки у Вас ни какой нет

   
 
 автор: P@Sol   (31.07.2007 в 15:58)   письмо автору
 
   для: Faraon   (31.07.2007 в 15:52)
 

см. таблицу внимательнее в посте от 31.07.2007 в 13:32

   
 
 автор: Faraon   (31.07.2007 в 16:19)   письмо автору
 
   для: P@Sol   (31.07.2007 в 15:58)
 

Ну так у Вас столбец ftp находится в таблице ftpserver, если вы так хотите отсортировать пишите ORDER BY ftpserver.ftp

   
 
 автор: P@Sol   (31.07.2007 в 16:24)   письмо автору
 
   для: Faraon   (31.07.2007 в 16:19)
 

вы сами то пробовали?
и в конце концов ошибка (и главный вопрос) заключается в том, что запрос выводит все файлы, а не в том, что они не попорядку

   
 
 автор: Faraon   (31.07.2007 в 16:44)   письмо автору
 
   для: P@Sol   (31.07.2007 в 16:24)
 

А если так попробовать

SELECT *
FROM ftpfile a
LEFT JOIN ftpserver b ON a.id_ftp = b.id
AND a.name LIKE 'w.bak' ORDER BY ftp

   
 
 автор: P@Sol   (31.07.2007 в 16:49)   письмо автору
 
   для: Faraon   (31.07.2007 в 16:44)
 

ничего не изменилось

   
 
 автор: Faraon   (31.07.2007 в 16:58)   письмо автору
 
   для: P@Sol   (31.07.2007 в 16:49)
 

Последний вариант, больше в голову что-то не приходит

SELECT a.id,a.name,a.id_parent,a.size,a.type
FROM ftpfile a
LEFT JOIN ftpserver b ON (a.id_ftp = b.id) AND a.name = 'w.bak' ORDER BY b.ftp

   
 
 автор: P@Sol   (01.08.2007 в 09:09)   письмо автору
 
   для: Faraon   (31.07.2007 в 16:58)
 

опять то же самое выдает:(
мастера MySQL (например, Trianon, cheops и д.р.) очень нужна ваша помощь

   
 
 автор: Trianon   (01.08.2007 в 09:11)   письмо автору
 
   для: P@Sol   (01.08.2007 в 09:09)
 

Сформулируйте четко, какие строки и в каком порядке Вы хотите видеть.
>как отсортировать нужные файлы по порядку по фтп?
Что такое нужные файлы?

   
 
 автор: P@Sol   (01.08.2007 в 10:07)   письмо автору
 
   для: Trianon   (01.08.2007 в 09:11)
 

нужные файлы определяются оператором LIKE

мне надо чтобы запрос вывел все файлы из таблицы ftpfile соответствующие LIKE и отсортировал их по имени ftp из таблицы ftpserver

   
 
 автор: Trianon   (01.08.2007 в 10:13)   письмо автору
 
   для: P@Sol   (01.08.2007 в 10:07)
 

 $sql = 
"SELECT a.id,b.ftp_name, a.name,a.id_parent,a.size,a.type  
  FROM ftpfile a  
    LEFT JOIN ftpserver b ON a.id_ftp = b.id 
  WHERE a.name LIKE '$pattern' 
  ORDER BY b.ftp , a.type, a.name";

   
 
 автор: Faraon   (01.08.2007 в 09:20)   письмо автору
 
   для: P@Sol   (01.08.2007 в 09:09)
 

Забыл условие WHERE

SELECT a.id,a.name,a.id_parent,a.size,a.type 
FROM ftpfile a 
LEFT JOIN ftpserver b ON (a.id_ftp = b.id) WHERE a.name = 'w.bak' ORDER BY b.ftp 

   
 
 автор: P@Sol   (01.08.2007 в 10:06)   письмо автору
 
   для: Faraon   (01.08.2007 в 09:20)
 

а это работает

   
 
 автор: P@Sol   (01.08.2007 в 10:30)   письмо автору
 
   для: P@Sol   (31.07.2007 в 12:58)
 

Faraon и Trianon громандное спасибо

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования