Привет, можно ли как-то реализовать такой запрос по другому?
есть таблица id((int)primary)/int2
По int2 есть index
Есть массив значений для $int2 = [1,24,5]; (~ элементов до 100 может быть)
Нужно максимально быстро узнать
нет ли в таблице хотя-бы одного из этих значений.
Можно было бы сделать обычный php цикл в котором делать запрос://рассчитывая что быстро попадется
foreach($int2 as $val)
{
if(!$s=mysql::query("SELECT 1 FROM `tab` WHERE `int2`=$val LIMIT 1"))
{
echo 'ok';
break;
}
}
Еще можно посчитать:
$N=count($int2);
if(!$M=mysql::count("SELECT COUNT(*) AS `count` FROM `tab` WHERE `int2` IN ('".implode("','",$val)."') GROUP BY `int2`"))$M=0;
if($M!==$N)
{
echo 'ok';
}
Может посоветуете более простой способ или какой по вашему удобнее?
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
McLotos
8.07.2014 - 15:59
Вообще, на сколько мне известно. засовывать запрос в цикл это плохая практика.
в sql запрос можно поставить OR и таким образом узнать есть ли хоть один результат
_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Цитата |
Вообще, на сколько мне известно. засовывать запрос в цикл это плохая практика |
100%
Наверное можно сделать подзапросом и переложить этот цикл на MYSQL но мне кажется логика не изменится.
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Цитата |
в sql запрос можно поставить OR и таким образом узнать есть ли хоть один результат |
Мне не нужно есть ли хоть один! Мне нужно нет ли хотя бы одного!
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Если поставить NOT IN он что-то найдет и это не решение
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
McLotos
8.07.2014 - 16:09
Цитата (ABC @ 8.07.2014 - 15:52) |
count("SELECT COUNT(*) |
не совсем понял этот момент кода.
SELECT COUNT(id) FROM table WHERE int2>0 AND int2<101
как вариант?
_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
McLotos
8.07.2014 - 16:11
Это если нужно узнать только количество.
А если получить их ID то без Count. тогда мы получаем массив в котором лежат все ID элементов у которых поле int2 больше 0 и меньше 101
_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Цитата |
SELECT COUNT(id) FROM table WHERE int2>0 AND int2<101 как вариант? |
они не по порядку... и не подойдет
Цитата |
не совсем понял этот момент кода. |
группируются и считаются совпавшие строки
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
McLotos
8.07.2014 - 16:27
В смысле не по порядку? для запроса это не имеет значения. Или я что-то не так понял
_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
SergeySA
Цитата |
нет ли в таблице хотя-бы одного |
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
sergeiss
8.07.2014 - 16:31
Цитата (ABC @ 8.07.2014 - 15:52) |
нет ли в таблице хотя-бы одного |
Первая проблема в том, что данная фраза воспринимается однозначно: ты хочешь определить, есть ли в таблице хотя бы один айди из списка. Да, "велИкая и могУчая рУсская язЫка"

Только из дальнейшего диалога становится понятно, что тебе надо найти любой айди из указанного списка, чтобы он отсутствовал в таблице.
А по сути вопроса... Сейчас подумаю.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Цитата |
Только из дальнейшего диалога становится понятно, что тебе надо найти любой айди из указанного списка, чтобы он отсутствовал в таблице. |
точно
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Хотел с NULL придумать, но не получается:
SELECT 1 FROM `tab` WHERE `int2` IN ('".implode("','",$val)."') AND `id` IS NULL LIMIT 1
не находит :(
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
McLotos
8.07.2014 - 16:40
Т.е. надо проверить все ID и показать тот которого НЕТ в таблице?
Может тогда сделать проще?
Вытянуть все имеющиеся и дальше прото пробежаться по массиву и получить новый массив тех кого нету
_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Цитата |
Т.е. надо проверить все ID и показать тот которого НЕТ в таблице? |
не нужно показывать нужно просто узнать что нет хотя бы одного
Цитата |
Может тогда сделать проще? Вытянуть все имеющиеся и дальше прото пробежаться по массиву и получить новый массив тех кого нету |
А если их миллиард?
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.