Доброе утро. Я новичок и у меня появилось несколько вопросов по запросам к БД.
1. Какая разница между 2-мя запросами, и какой лучше использовать:
$query = mysql_query("SELECT * FROM `users` WHERE id=1 ");
$query = mysql_query("SELECT `id` FROM `users` WHERE id=1 ");
2. Есть две таблицы в БД. Одна `users`, другая - `works`. В `works` есть поле id_author - это значение id из таблицы `users`. Хочу получить список последних работ.
Как проще получить список работ и имя, фамилию автора из таблицы `users`.
Цитата (PHPLoh @ 2.08.2013 - 09:21) |
1. Какая разница между 2-мя запросами, и какой лучше использовать: |
В первом все поля из строки с id = 1
Во втором только поле id
Лучше второй, меньше данных читается из базы и передается по сети.
Цитата (PHPLoh @ 2.08.2013 - 09:21) |
2. Есть две таблицы в БД. Одна `users`, другая - `works`. В `works` есть поле id_author - это значение id из таблицы `users`. |
JOIN
Guest
А если мне необходимо получить всю информацию, то первый вариант, как я понял. Но лучше получить только те поля, которые необходимы для работы. Правильно я понял?
Игорь_Vasinsky
2.08.2013 - 09:42
ага.
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Цитата |
Лучше второй, меньше данных читается из базы и передается по сети |
второй запрос вообще не имеет смысла
Цитата |
Хочу получить список последних работ |
необходимо более конкретное условие выборки, например список последних работ за час, сутки, неделю, месяц и тд. и не только временной диапазон, тут могут быть еще условия.
_____________
Стимулятор ~yoomoney - 41001303250491
HErATuB
2.08.2013 - 10:33
Цитата (Guest @ 2.08.2013 - 05:35) |
Цитата (PHPLoh @ 2.08.2013 - 09:21) 2. Есть две таблицы в БД. Одна `users`, другая - `works`. В `works` есть поле id_author - это значение id из таблицы `users`.
JOIN |
Не обязательно, можно и так:
SELECT `users`.*, `works`.* FROM `users`,`works` WHERE `works`.`id_author`=`users`.`id` AND `user`.`id` IN ('1','2','3','4')
Цитата (PHPLoh @ 2.08.2013 - 09:21) |
Доброе утро. Я новичок и у меня появилось несколько вопросов по запросам к БД.
1. Какая разница между 2-мя запросами, и какой лучше использовать:
$query = mysql_query("SELECT * FROM `users` WHERE id=1 "); $query = mysql_query("SELECT `id` FROM `users` WHERE id=1 ");
2. Есть две таблицы в БД. Одна `users`, другая - `works`. В `works` есть поле id_author - это значение id из таблицы `users`. Хочу получить список последних работ. Как проще получить список работ и имя, фамилию автора из таблицы `users`. |
Все исходит из задачи! Для определение лучшего надо ответить на вопросы что?, зачем?, для чего?, почему?
Зачем нужны данные, для чего они записываются в БД и зачем их доставать от туда запросом?..... таких вопросов может быть много.
По существу:
1. Лучше использовать тот вариант, который больше подходит к решению задачи только потому что к запросу $query = mysql_query("SELECT * FROM `users` WHERE id=1 "); можно создать индексы и получаемая строка будет гораздо ближе нежели поле id из запроса $query = mysql_query("SELECT * FROM `users` WHERE id=1 ");
2. Лучше использовать тот вариант, который больше подходит к решению задачи: подходят как JOIN, INNER JOIN, LEFT JOIN, также и запрос с условием.
Цитата |
подходят как JOIN, INNER JOIN, LEFT JOIN, также и запрос с условием |
ну наличие JOIN на условие никак не влияет, а то можно по вашим словам предположить что это взаимоисключающие понятия
_____________
Стимулятор ~yoomoney - 41001303250491
Цитата (Valick @ 2.08.2013 - 13:45) |
Цитата | подходят как JOIN, INNER JOIN, LEFT JOIN, также и запрос с условием |
ну наличие JOIN на условие никак не влияет, а то можно по вашим словам предположить что это взаимоисключающие понятия
|
В применении JOIN создается условие по которому таблицы JOINятся и в таком случае результирующая таблица будет сформирована по условиям JOINа и дополнительных условий можно не создавать (предполагается что можно обойтись без WHERE).
Раз уж есть такая тема, то у меня тоже вопрос)
Как в запрос с двумя таблицами поставить условие LEFT JOIN?
SELECT bt_z_order_items.id
FROM bt_z_order_items, bt_z_order
LEFT JOIN bt_z_booking AS bo ON bt_z_order_items.id = bo.item_id
WHERE bt_z_order_items.order_id = bt_z_order.id
При таком запросе выдает ошибку "Unknown column 'bt_z_order_items.id' in 'on clause'"
Если убрать вторую таблицу `bt_z_order` и условие WHERE все работает.
Цитата |
предполагается что можно обойтись без WHERE |
таких запросов единицы, редко когда нужна при выборке вся таблица целиком
_____________
Стимулятор ~yoomoney - 41001303250491
Lightt, у вас три таблицы, так и используйте два JOIN, зачем этот "винегрет"...
_____________
Стимулятор ~yoomoney - 41001303250491
ValickРаз спрашиваю значит нужен) это упрощенный пример) ответ на него нашел уже.
Вместо "," нужно ставить "JOIN". Такой код срабатывает -
SELECT bt_z_order_items.id
FROM bt_z_order_items JOIN bt_z_order
LEFT JOIN bt_z_booking AS bo ON bt_z_order_items.id = bo.item_id
WHERE bt_z_order_items.order_id = bt_z_order.id
SELECT bt_z_order_items.id
FROM bt_z_order_items JOIN bt_z_order ON bt_z_order_items.order_id = bt_z_order.id
LEFT JOIN bt_z_booking AS bo ON bt_z_order_items.id = bo.item_id
а еще попробуйте вот так
SELECT bt_z_order_items.id
FROM bt_z_order_items JOIN bt_z_order ON USING(id)
LEFT JOIN bt_z_booking AS bo ON USING(id)
_____________
Стимулятор ~yoomoney - 41001303250491
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.