[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вопросы по MySQL
PHPLoh
Доброе утро. Я новичок и у меня появилось несколько вопросов по запросам к БД.

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`.
Guest
Цитата (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
PHPLoh
Guest
А если мне необходимо получить всю информацию, то первый вариант, как я понял. Но лучше получить только те поля, которые необходимы для работы. Правильно я понял?
Игорь_Vasinsky
ага.

_____________
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
Valick
Цитата
Лучше второй, меньше данных читается из базы и передается по сети

второй запрос вообще не имеет смысла
Цитата
Хочу получить список последних работ

необходимо более конкретное условие выборки, например список последних работ за час, сутки, неделю, месяц и тд. и не только временной диапазон, тут могут быть еще условия.

_____________
Стимулятор ~yoomoney - 41001303250491
HErATuB
Цитата (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')
mvg
Цитата (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, также и запрос с условием.
Valick
Цитата
подходят как JOIN, INNER JOIN, LEFT JOIN, также и запрос с условием

ну наличие JOIN на условие никак не влияет, а то можно по вашим словам предположить что это взаимоисключающие понятия


_____________
Стимулятор ~yoomoney - 41001303250491
mvg
Цитата (Valick @ 2.08.2013 - 13:45)
Цитата
подходят как JOIN, INNER JOIN, LEFT JOIN, также и запрос с условием

ну наличие JOIN на условие никак не влияет, а то можно по вашим словам предположить что это взаимоисключающие понятия

В применении JOIN создается условие по которому таблицы JOINятся и в таком случае результирующая таблица будет сформирована по условиям JOINа и дополнительных условий можно не создавать (предполагается что можно обойтись без WHERE).
Lightt
Раз уж есть такая тема, то у меня тоже вопрос)

Как в запрос с двумя таблицами поставить условие 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 все работает.
Valick
Цитата
предполагается что можно обойтись без WHERE

таких запросов единицы, редко когда нужна при выборке вся таблица целиком


_____________
Стимулятор ~yoomoney - 41001303250491
Valick
Lightt, у вас три таблицы, так и используйте два JOIN, зачем этот "винегрет"...


_____________
Стимулятор ~yoomoney - 41001303250491
Lightt
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
Valick
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
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.