Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Какой запрос mysql более валидный

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
createl
Отправлено: 18 Марта, 2014 - 09:29:59
Post Id



Гость


Покинул форум
Сообщений всего: 87
Дата рег-ции: Янв. 2012  


Помог: 0 раз(а)




Здраствуйте форумчане. Вот дорвался до компьютера, и сразу глупые мысли в голову лезут. Не понял
Подскажите как более кошерно. Нужно вывести из таблицы неизвестное количество значений, как правило от 1 до нескольких десятков. Таблица может быть на миллион строк.
Вот первый способ я придумал цикл и на каждое значение и отдельный запрос.
PHP:
скопировать код в буфер обмена
  1. foreach ($arr_values)
  2. {
  3.    $mysql->query ("SELECT * FROM `permanent_url` WHERE `md5_id` = '$arr_values'");
  4. }


а во втором случае все в куче
PHP:
скопировать код в буфер обмена
  1. $mysql->query ("SELECT * FROM `permanent_url` WHERE `md5_id` = '15a0f2709d67c161b9329faed82fa292_18_03_14' OR '8fb3babaace1b96435ad305a469ae243_17_03_14 OR ...'");
  2.  
 
 Top
EuGen Администратор
Отправлено: 18 Марта, 2014 - 09:41:54
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Указать всё в IN
PHP:
скопировать код в буфер обмена
  1. $mysql->query ("SELECT * FROM `permanent_url` WHERE `md5_id` IN (".
  2. join(',', array_map(function($x)
  3. {
  4.    //optional: apply escaping here if not in driver
  5.    return "'".$x."'";
  6. }, $arr_values)).
  7. ")");

- тогда MySQL сумеет воспользоваться range scan (если создан индекс по md5_id. Если индекса нет, а запрос частый - создать). Не использовать запрос в цикле.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
createl
Отправлено: 18 Марта, 2014 - 12:33:25
Post Id



Гость


Покинул форум
Сообщений всего: 87
Дата рег-ции: Янв. 2012  


Помог: 0 раз(а)




Здоровски. Не знал что функцию можно определить как значение другой функции.
Правда мне кажется наглядность страдает.
За запрос спасибо. Не знал о таком, вот что получилось, работает
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `permanent_url` WHERE `md5_id` IN ('1030d9a371edad5a4346bc19ca7ad48b','1657c4fda9b7c19893ca9d624bf36e56','604f0d7390533f6deda892dbd3f1cd28')
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB