Получении данных одним sql запросом [PHP][SQL]

Статус
В этой теме нельзя размещать новые ответы.
Если из таблицы comments вам нужно только 4 ячейки, то извлекайте только их в подзапросе.
Но, только в случае если данные по смыслу те же, что и в предыдущих двух подзапросах
 
если вы считаете, что это большое количество запросов, или что из-за них появится бОльшая нагрузка, вы ошибаетесь
Для просмотра ссылки Войди или Зарегистрируйся
запросы должны объединятся логически, а не с целью уменьшения количества запросов.
вы сможете на такой оптимизации реально сэкономить(наверно.может и в такой ситуации не удастся), только если ваш SQL-сервер - отдельная машина. В иных ситуациях, скорость будет такая же запроса, более того вы увеличиваете нагрузка на PHP, заставляя его анализировать разномастные данные.
к тому же нагрузка на SQL-сервер в случае использования объединений UNION ALL будет одинакова с нагрузкой двух отдельных запросов.а нагрузка UNION будет больше чем любая из них, по причине сортировки, и удаления дублей
В общем, сильно не советую делать такую оптимизацию.

Да , но в моем случае - данные (если судить по их размеру) - мизерные. Полученные данные с таблицы "comments" не превышают 70 байт .

...по причине сортировки, и удаления дублей
"UNION ALL" вроде отключает удаление дублей!
 
Да , но в моем случае - данные (если судить по их размеру) - мизерные. Полученные данные с таблицы "comments" не превышают 70 байт .
повторюсь.
если ваши данные из comments по смыслу те же, что и из первой таблицы,и вы будете их использовать таким же образом, как и данные первых двух подзапросов, то такой запрос нормален.
НО, если вы будете использовать их отдельным способом, то смысла в таком объединении нету, и оно даже вредно.пускай даже на 70 байтах
"UNION ALL" вроде отключает удаление дублей!
вы внимательно прочитали мое сообщение?
UNION ALL так же по скорости, как и набор отделных запросов
UNION - медленее
так, что я все правильно написал
 
повторюсь.
если ваши данные из comments по смыслу те же, что и из первой таблицы,и вы будете их использовать таким же образом, как и данные первых двух подзапросов, то такой запрос нормален.
НО, если вы будете использовать их отдельным способом, то смысла в таком объединении нету, и оно даже вредно.пускай даже на 70 байтах

вы внимательно прочитали мое сообщение?
UNION ALL так же по скорости, как и набор отделных запросов
UNION - медленее
так, что я все правильно написал

Ладно , не буду с вами спорить имхо вижу что у вас опыта больше чем у меня ...=)

Не могу понять фразы "по смыслу те же" объясните пожалуйся конкретнее =)
 
Если у вас допустим в двух разных таблица х в разных полях содержатся логины пользователей
и вы объединяете два запроса, именно по этому столбцу, то данные по смыслу одни и те же.
то есть когда вы смотрите поочередно каждый ряд, возвращаемый эти зпосом, то в каждой строке вы по любому увидите логин, независимо от того из какой таблицы он был получен.
этот запрос хороший.

а вот пример плохого запоса:
Код:
CREATE TABLE users(
login char, -- логин пользователя
count_posts int -- количество его постов
)
CREATE TABLE subforum(
title char, -- название подфорума
count_posts int -- количество постов в нем
)
так вот запрос вида:
Код:
(SELECT * FROM users LIMIT 10) UNION ALL
(SELECT * FROM subforum LIMIT 10)
является синтаксически верным.
но, в первых десяти строках будут пары пользователь-количесвто его постов, а во вторых пары подфорум-количество постов в нем
по смыслу это разные веши.
в PHP его можно обработать.первые десять строк в одну HTML-таблицу пишем, а вторые в другую.и получае своего рода "статистику" сразу и по пользователям, и по подфорумам, при помощи одного запроса.
но, это является неверным с точки зрения хорошего стиля,потому что другому человеку(а иногда самому себе спустя пару месяцев) будет очень трудно понять, почему вы обрабатываете первую половину резльтата запоса отдельно от второй, и по разному
 
вот теперь более понятно
ладно, сделаю как вы сказали.. пускай для comments будет отдельный запрос..... хрен с ним....))))))
еще раз спасибо за помощь =)
 
Нельзя одним запросом получать данные ид двух совершенно не связнвх таблиц!!!
Всегда должно быть поле по которому они будут объеденены..
Это я вам как админ бд говорю!!!
 
формально можно.
синтаксис и процесор БД позволяют.
логически нельзя.
потому что ткой запос - источник потенциальных ошибок, глюков, и трудной переносимости/масштабируемости/восприимчивости кода
 
Я не понимаю в чем сложность выполнения трех запросов??
Приведите структуру таблиц.
 
Я не понимаю в чем сложность выполнения трех запросов?? Приведите структуру таблиц.

Полностью согласен. Если названия и типы столбцов всех таблиц одинаковы (хотя, если не изменяет память, при UNION названия и типы столбцов результсета определяются по первому SELECT'у), все должно работать. Названия столбцов во 2-м и 3-м SELECTах "причесываются" AS'ом. Типы - CAST'ом. Если в какой-то таблице недостает столбца - добавляется константа нужного типа.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху