|
|
|
| Нужна выборка из базы строк, соответствующие номерам, хранящимся в массиве, то есть, допустим, есть массив:
$arr = array(12, 43, 23, 65, 1, 25)
|
Тогда мне нужно, чтобы из базы выбрались строки с ключами 12, 43, 23 и т.д. Для этого я написал код:
$whereStr = '';
foreach ($_SESSION['photos'] as $value)
{
$whereStr .= $value.', ';
}
$whereStr = substr($whereStr, 0, -2);
$sql = "SELECT id FROM users WHERE id IN (".$whereStr.") LIMIT 6";
|
Все работает, массив нужных строк формируется правильно. Только как мне сделать, чтобы выборка происходила в порядке индексов элементов массива, их следования, а не, грубо говоря, в случайном порядке? То есть чтобы выдавалось именно 12, 43, 23, ... , а не, например, 43, 23, 12, 1, ... | |
|
|
|
|
|
|
|
для: Sturmvogel
(29.01.2011 в 11:38)
| | За порядок следования отвечает выражение ORDER BY
Очевидно, придется найти подходящую случаю функцию. | |
|
|
|
|
|
|
|
для: Trianon
(29.01.2011 в 11:45)
| | Я понимаю, что сортировка осуществляется ORDER BY | |
|
|
|
|
|
|
|
для: Sturmvogel
(29.01.2011 в 11:47)
| | Тогда в чем проблема?
Не найти функцию, которая находит номер элемента в списке? | |
|
|
|
|
|
|
|
для: Trianon
(29.01.2011 в 11:49)
| | Если б я знал -- я бы не спрашивал | |
|
|
|
|
|
|
|
для: Sturmvogel
(29.01.2011 в 11:58)
| | http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_find-in-set
FIND_IN_SET()
FIELD()
на выбор. Я бы выбрал перввую. | |
|
|
|
|
|
|
|
для: Trianon
(29.01.2011 в 12:03)
| | Спасибо | |
|
|
|
|
|
|
|
для: Trianon
(29.01.2011 в 12:03)
| |
$sql = "SELECT id FROM users WHERE id IN (".$whereStr.") ORDER BY FIND_IN_SET(id, '".$whereStr."') LIMIT 6";
|
такой код не помогает | |
|
|
|
|
|
|
|
для: Sturmvogel
(29.01.2011 в 12:16)
| | У Вас там в строке небось пробелов полно. | |
|
|
|
|
|
|
|
для: Trianon
(29.01.2011 в 12:23)
| | Точно! Исправил на
$sql = "SELECT id FROM users WHERE id IN (".$whereStr.") ORDER BY FIND_IN_SET(id, '".str_replace(' ', '', $whereStr)."') LIMIT 6";
|
и все заработало как надо. Спасибо. | |
|
|
|
|
|
|
|
для: Sturmvogel
(29.01.2011 в 12:25)
| | Проще было не пихать пробелы в цикле.
Еще проще - использовать функцию implode
$whereStr = implode(',', $_SESSION['photos'])
|
| |
|
|
|
|
|
|
|
для: Trianon
(29.01.2011 в 12:31)
| | Спасибо и за этот совет | |
|
|
|