- 1
- 2
- 3
- 4
- 5
- 6
- 7
$res = mysql_query("SELECT * FROM `users`");
while ($arr = mysql_fetch_assoc($res))
{
$res1 = mysql_query("SELECT * FROM `cabinet_users` WHERE `nick`='$arr[user]'");
$arr1 = mysql_fetch_assoc($res1);
...
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+54
$res = mysql_query("SELECT * FROM `users`");
while ($arr = mysql_fetch_assoc($res))
{
$res1 = mysql_query("SELECT * FROM `cabinet_users` WHERE `nick`='$arr[user]'");
$arr1 = mysql_fetch_assoc($res1);
...
}
JOIN'ы для слабаков.
> писал хранимые процедуры
Как-то он не с той стороны начал изучать SQL...
Shame on me, но я до сих пор полный нуб в хранимках, хотя SQL знаю неплохо.
Да и потом, я же могу в первом цикле кроме сборки массива $ids собирать массив со всеми колонками, чтобы потом склеить его с массивом, полученным из второго цикла.
А в этом примере как такую красоту собрать?
до сих пор недолюбливаю sql
Это ведь сайт с говнокодом, да?
P.S. Но красиво, да ;)
P.P.S. С другой стороны хорошо, что я тогда не смог это написать, а все-таки занялся изучением доков по SQL...
> неявный join всё равно присутствует
Неужели теперь действительно нужно писать явно текст зелёным... Даже я разглядел тег sarcasm в комменте @Lure_Of_Chaos, набранный 72 полужирным шрифтом.
спасибо
$all_ids =implode(',', $ids);
$res = mysql_query("SELECT * FROM `cabinet_users` WHERE `id` IN ($all_ids)");
Может я что-то путаю, надо будет дома проверить
SELECT * FROM table1 WHERE id IN (<ids_list>)
и
SELECT * FROM table1 WHERE id IN (<subquery from table2>)
улавливаете?
В первом случае оптимизатор запросов сделает: WHERE id = <1st value> OR id = <2nd value> OR...
Во втором случае: table1 INNER JOIN table2 ON table1.id = table2.id
Да и вообще, у Вас ошибка на уровне пыха вылетает, а не СУБД.
Просто inkanus-gray, привел кусок кода и написал "Вы так говорите, как будто джойны нужны:". Я и поделился опытом, про слишком длинный запрос. Там правда данные не из базы брались, а приходил массив id от пользователя, на основе которого формировался запрос.
Потестил на mysql - 100000 работает, 1000000 падает с ошибкой "превышен максимальный размер пакета" (тот самый max_allowed_packet, который у меня мегабайт). Так что ругается именно СУБД или либа для доступа к ней, но не сам пых.
Вот на ней можно было бы ставить такие эксперименты, а со сраными 2к любой говнокод справится.