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

Форум MySQL

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

 

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

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

тема: Выбор из базы в порядке индексов массива
 
 автор: Sturmvogel   (29.01.2011 в 11:38)   письмо автору
 
 

Нужна выборка из базы строк, соответствующие номерам, хранящимся в массиве, то есть, допустим, есть массив:


$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, ...

  Ответить  
 
 автор: Trianon   (29.01.2011 в 11:45)   письмо автору
 
   для: Sturmvogel   (29.01.2011 в 11:38)
 

За порядок следования отвечает выражение ORDER BY
Очевидно, придется найти подходящую случаю функцию.

  Ответить  
 
 автор: Sturmvogel   (29.01.2011 в 11:47)   письмо автору
 
   для: Trianon   (29.01.2011 в 11:45)
 

Я понимаю, что сортировка осуществляется ORDER BY

  Ответить  
 
 автор: Trianon   (29.01.2011 в 11:49)   письмо автору
 
   для: Sturmvogel   (29.01.2011 в 11:47)
 

Тогда в чем проблема?
Не найти функцию, которая находит номер элемента в списке?

  Ответить  
 
 автор: Sturmvogel   (29.01.2011 в 11:58)   письмо автору
 
   для: Trianon   (29.01.2011 в 11:49)
 

Если б я знал -- я бы не спрашивал

  Ответить  
 
 автор: Trianon   (29.01.2011 в 12:03)   письмо автору
 
   для: 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()
на выбор. Я бы выбрал перввую.

  Ответить  
 
 автор: Sturmvogel   (29.01.2011 в 12:08)   письмо автору
 
   для: Trianon   (29.01.2011 в 12:03)
 

Спасибо

  Ответить  
 
 автор: Sturmvogel   (29.01.2011 в 12:16)   письмо автору
 
   для: Trianon   (29.01.2011 в 12:03)
 

$sql = "SELECT id FROM users WHERE id IN (".$whereStr.") ORDER BY FIND_IN_SET(id, '".$whereStr."') LIMIT 6";


такой код не помогает

  Ответить  
 
 автор: Trianon   (29.01.2011 в 12:23)   письмо автору
 
   для: Sturmvogel   (29.01.2011 в 12:16)
 

У Вас там в строке небось пробелов полно.

  Ответить  
 
 автор: Sturmvogel   (29.01.2011 в 12:25)   письмо автору
 
   для: 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";


и все заработало как надо. Спасибо.

  Ответить  
 
 автор: Trianon   (29.01.2011 в 12:31)   письмо автору
 
   для: Sturmvogel   (29.01.2011 в 12:25)
 

Проще было не пихать пробелы в цикле.
Еще проще - использовать функцию implode
 $whereStr = implode(',', $_SESSION['photos'])

  Ответить  
 
 автор: Sturmvogel   (29.01.2011 в 12:35)   письмо автору
 
   для: Trianon   (29.01.2011 в 12:31)
 

Спасибо и за этот совет

  Ответить  
Rambler's Top100
вверх

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