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

M
На сайте с 03.06.2012
Offline
73
820

Здравствуйте, необходимо выбрать данные из нескольких таблиц. Ниже сама структура:

Теперь есть задание: нужно отобразить на странице пользователя в каких статьях он оставлял сообщения и кто их опубликовал.

Делаю так: 1. из $_GET запроса получаю ид пользователя который просматривает свой профиль, делаю запрос в первую таблицу сообщений и выбираю ид статьи. 2. Потом делаю второй запрос По ид статьи и выбираю ид пользователей которые опубликовали статью. 3. Делаю третий запрос в таблицу пользователей и выбираю ник по ид с второй таблицы.

И собственно вопрос, как возможно получить все нужные данные использовав как минимум запросов в БД. Огромное спасибо всем за ответы!

siv1987
На сайте с 02.04.2009
Offline
427
#1

SELECT p.ид_статьи, u.ид_пользователя, u.ник FROM posts p INNER JOIN article a ON (p.ид_статьи=a.ид_статьи) INNER JOIN users u ON(а.ид_пользователя_который_добавил=u.ид_пользователя) WHERE p.ид_пользователя=$_GET

posts - таблица сообщений

articles - таблица статьи

users - таблица юзеров

M
На сайте с 03.06.2012
Offline
73
#2
siv1987:
SELECT p.ид_статьи, u.ид_пользователя, u.ник FROM posts p INNER JOIN article a ON (p.ид_статьи=a.ид_статьи) INNER JOIN users u ON(а.ид_пользователя_который_добавил=u.ид_пользователя) WHERE p.ид_пользователя=$_GET

posts - таблица сообщений
articles - таблица статьи
users - таблица юзеров

Очень сложно въезжаю. Объясните пожалуйста что означают буквы перед названием поля те: p.ид_статьи, u.ид - р и u, какую роль они играют. Я еще не силен в сложных запросах. Спасибо!

Timotty
На сайте с 13.09.2012
Offline
20
#3
meverikxp:
Очень сложно въезжаю. Объясните пожалуйста что означают буквы перед названием поля те: p.ид_статьи, u.ид - р и u, какую роль они играют. Я еще не силен в сложных запросах. Спасибо!

Эти буквы нужны только для того чтобы сократить запрос, в данном примере posts = p, article = a,users = u. Указание таблиц обязательно, потому что это сложный запрос в базу данных при котором учитываются колонки с одинаковыми колонками, т.е. название колонки в таблице сообщений ид_статьи и колонка в таблице самой статьи ид_статьи одинаковые:> Объяснил как мог :>

M
На сайте с 03.06.2012
Offline
73
#4
Timotty:
Эти буквы нужны только для того чтобы сократить запрос, в данном примере posts = p, article = a,users = u. Указание таблиц обязательно, потому что это сложный запрос в базу данных при котором учитываются колонки с одинаковыми колонками, т.е. название колонки в таблице сообщений ид_статьи и колонка в таблице самой статьи ид_статьи одинаковые:> Объяснил как мог :>

Подскажите пожалуйста на каких ресурсах можно почитать про сложные запросы, а то пока все что находил про простые запросы. Спасибо!

IL
На сайте с 20.04.2007
Offline
435
#5

sql-ex.ru

10 SLQей

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
M
На сайте с 03.06.2012
Offline
73
#6
siv1987:
SELECT p.ид_статьи, u.ид_пользователя, u.ник FROM posts p INNER JOIN article a ON (p.ид_статьи=a.ид_статьи) INNER JOIN users u ON(а.ид_пользователя_который_добавил=u.ид_пользователя) WHERE p.ид_пользователя=$_GET

posts - таблица сообщений
articles - таблица статьи
users - таблица юзеров

Запрос выдает ошибку

Unknown column 'а.ид_пользователя_который_добавил' in 'on clause' хотя в БД есть эта колонка

IL
На сайте с 20.04.2007
Offline
435
#7
meverikxp:
Unknown column 'а.ид_пользователя_который_добавил'

'а.ид_пользователя_который_добавил_статью' вы, видимо, последнее слово пропустили..

p.s. Разберитесь со структурой.. используйте нормальные названия полей.. приводите их тут же, если нужен "готовый" код.. - в смысле шансов больше.

p.p.s. ещё тут можно ошибиться.. INNER JOIN article a ON

M
На сайте с 03.06.2012
Offline
73
#8
ivan-lev:
'а.ид_пользователя_который_добавил_статью' вы, видимо, последнее слово пропустили..

p.s. Разберитесь со структурой.. используйте нормальные названия полей.. приводите их тут же, если нужен "готовый" код.. - в смысле шансов больше.

p.p.s. ещё тут можно ошибиться.. INNER JOIN article a ON

Спасибо за замечание.Вот реальный запрос с реальными названиями полей:

SELECT p.item_pid, u.user_id, u.user_name FROM sed_offers p INNER JOIN sed_projects a 
ON (p.item_pid=a.item_id) INNER JOIN sed_users u ON(а.item_userid=u.user_id)
WHERE p.item_userid=96

где

sed_offers - таблица постов

sed_projects - статьей

sed_users - пользователи

ошибка такая

#1054 - Unknown column 'а.item_userid' in 'on clause'

IL
На сайте с 20.04.2007
Offline
435
#9
#1054 - Unknown column '௩tem_userid' in 'on clause'

"а" русская -

M
На сайте с 03.06.2012
Offline
73
#10
ivan-lev:
"а" русская -

Спасибо, огромное, все получилось.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий