|
|
|
| Здравствуйте! Вот столкнулся я с такой странной задачей:
ORDER BY не помогает, потому что мне не нужно сортировать по убыванию или возрастанию.
К примеру:
$MyBase = mysql_query("SELECT id from USERS where id = '15' or id = '13' or id = '21' or id = '19");
while($id = mysql_fetch_array($MyBase)) {
print "$id[id]<br/>"; //И так далее }
|
Мне нужно отсортировать, как я это указал при запросе 15, 13, 21, 19... Но используя ORDER BY это невозможно. Как мне выводить именно в том порядке, в котором я хочу? | |
|
|
|
|
|
|
|
для: Зелим
(05.08.2007 в 19:40)
| | Зачем Вы делаете запрос вообще? "Дайте мне идентификатор того, где идентификатор равен пяти".
И, следовательно, если Вы знаете что за чем следует, то никакой сортировки делать не надо вообще. | |
|
|
|
|
|
|
|
для: Unkind
(05.08.2007 в 19:52)
| | Допусти я не знаю значения полей, которых я хочу получить.
К примеру, есть массив и он тоже создается автоматически. Вот так:
$dir = opendir("./folder/");
while($file = readdir($dir)) {
$fname = explode(".",$file);
if($fname[1] == "jpg" && time()-filemtime("./folder/$file")<86400) $array[filemtime("./folder/$file")] = $fname[0]; }
closedir($dir);
krsort($array);
for(Reset($array); $key = key($array); Next($array)) { $id = "or id = $array[$key] "; }
$users = mysql_query("select id from users where id = 'n' ".$id." ");
while($user = mysql_fetch_array($users)) {
print "$user[id]<br/>"; }
|
Код неуклюжий, но все равно. Я смотрю какие фотки в нем новые, беру их названия, потому что они сопадают с идентификаторами в базе. Но дело в том что при запросе в базу данных я получаю результат, отсортированный по времени добавления записи в базу. А я хочу, что бы было отсортировано по дате изменения файла (фото). | |
|
|
|
|
|
|
|
для: Зелим
(05.08.2007 в 20:40)
| | Это можно реализовать, например, с помощью UNION:
SELECT * FROM `tbl` WHERE `id` = 10
UNION
SELECT * FROM `tbl` WHERE `id` = 8
UNION
SELECT * FROM `tbl` WHERE `id` = 9;
|
А вообще Вам было бы крайне желательно добавить в структуру таблицы поле, в кот-ром хранится время последнего изменения фото. Так будет намного лучше.
А Ваш код в дальнейшем приведет к тому, что скрипт будет выполняться непозволительно долго. | |
|
|
|
|
|
|
|
для: Unkind
(05.08.2007 в 20:53)
| | Спасибо! Тогда все-таки придется мне дополнительно покопаться в базе.
P.S. А пробежка по файлам занимает много времени? | |
|
|
|
|
|
|
|
для: Зелим
(05.08.2007 в 20:57)
| | В зависимости от кол-ва файлов, конечно. Но Вы еще и используете filemtime(), да еще и два раза.
Данные о последней модификации файла кешируются, но в таком случае возможны ошибки в выводе нужных фото. Придется очищать кеш и заново узнавать время последней модификации. Это, безусловно, еще больше ухудшит положение.
Просто добавьте в скрипт, где происходит сохранение фотографии, запрос на обновление поля, отвечающего за хранение времени последней модификации файла. А если происходит удаление фото, то можно обнулить поле.
Вместо Вашего кода можно будет сделать простейший запрос вроде
SELECT * FROM `users` ORDER BY `mphoto` DESC LIMIT 5;
|
| |
|
|
|
|
|
|
|
для: Unkind
(05.08.2007 в 21:08)
| | Просто у меня и так в этой таблице, в которой хранится информация о юзерах, много полей :)
Ну-с, остается добавить еще одно, которое отвечает за обновление.
Спасибо! | |
|
|
|
|
|
|
|
для: Зелим
(05.08.2007 в 21:12)
| | Ничего страшного не будет. | |
|
|
|
|
|
|
|
для: Unkind
(05.08.2007 в 20:53)
| | Н-да...
$list = '10,8,9';
$sql = "SELECT * FROM tbl WHERE id IN($list) ORDER BY FIELD(id, $list)";
|
| |
|
|
|
|
|
|
|
для: Trianon
(05.08.2007 в 23:18)
| | Вот это тоже мне пригодится! :) Фэнкс! | |
|
|
|
|
|
|
|
для: Зелим
(05.08.2007 в 19:40)
| | ORDER BY можно применять для вывода строк в явно указанном списком порядке ключей.
Смотреть нужно в сторону функции FIND_IN_SET() | |
|
|
|