многотабличный запрос

 
Посетитель
small user social cms
Сообщений: 71
Всем привет, прочитал около 10-ти статей по обьеденинию запросов к базе. Так и не понял:
Код PHP:
  1. SELECT * FROM Таблица1, Таблица2 WHERE Условие1, Условие2
Код PHP:
  1. SELECT * FROM Таблица1 INNER JOIN Таблица2 [(ON Условие1 [Условие2 ...])]
Эти два запроса одинаковые или нет? (Вывод будет одинаков?)
Посетитель
small user social cms
МедальАвторитет форумаПочетный донор проектаКубок зрительских симпатий
Сообщений: 3094
нет, во втором примере же джоин. Но это мое имхо новичка) Вам что надо сделать?
Редактировалось: 1 раз (Последний: 2 декабря 2017 в 18:32)
Реклама
cms
Посетитель
small user social cms
Сообщений: 71
Jestik:

нет, во втором примере же джоин. Но это мое имхо новичка) Вам что надо сделать?

Объединить несколько таблиц в один запрос
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2711
ВаленокPC,
Первый запрос выполнить возможно. Он выведет кучу несистематизированной информации из двух таблиц, которую даже невозможно будет использовать. Потому что все значения будут неуникальны и непонятно, что откуда.

А вот джойнить две таблицы получится только по условию. Например так:
Код SQL:
  1. SELECT * FROM Таблица1
  2. INNER JOIN Таблица2 ON Таблица1.id = Таблица2.user_id
И результаты этого запроса уже вполне можно как-то использовать.
А вообще проще присвоить таблицам элиасы и оперировать ими. Результаты запросов тогда будут вполне вменяемыми и их можно применять.
Примеры:
Код SQL:
  1. SELECT * FROM table1 a, table2 b WHERE a.id = b.user_id AND b.id > 7
аналогично этому:
Код SQL:
  1. SELECT * FROM table1 a
  2. INNER JOIN table2 b ON a.id = b.user_id
  3. WHERE b.id > 7
================================================
А вообще, вру.
Первый запрос выведет результаты из обоих таблиц, а второй - только из первой.
================================================

Включите отладку в админке и ткните в футере в кнопку "Отладка". Там полно примеров таких запросов. Например:
Код SQL:
  1. SELECT i.*, w.controller AS controller, w.name AS name
  2. FROM cms_widgets_bind i
  3. FORCE INDEX (page_id)
  4. INNER JOIN cms_widgets AS w ON w.id = i.widget_id
  5. WHERE (i.template = 'tseso') AND (i.is_enabled IS NOT NULL) AND (i.page_id IN ('0','151','152'))
  6. ORDER BY i.page_id, i.position, i.ordering
  7. LIMIT 1000
Редактировалось: 2 раз (Последний: 2 декабря 2017 в 20:11)
Посетитель
small user social cms
Сообщений: 71
Ris:

ВаленокPC,
Первый запрос выполнить возможно. Он выведет кучу несистематизированной информации из двух таблиц, которую даже невозможно будет использовать. Потому что все значения будут неуникальны и непонятно, что откуда.

А вот джойнить две таблицы получится только по условию. Например так:
Код SQL:
  1. SELECT * FROM Таблица1
  2. INNER JOIN Таблица2 ON Таблица1.id = Таблица2.user_id
И результаты этого запроса уже вполне можно как-то использовать.
А вообще проще присвоить таблицам элиасы и оперировать ими. Результаты запросов тогда будут вполне вменяемыми и их можно применять.
Примеры:
Код SQL:
  1. SELECT * FROM table1 a, table2 b WHERE a.id = b.user_id AND b.id > 7
аналогично этому:
Код SQL:
  1. SELECT * FROM table1 a
  2. INNER JOIN table2 b ON a.id = b.user_id
  3. WHERE b.id > 7
================================================
А вообще, вру.
Первый запрос выведет результаты из обоих таблиц, а второй - только из первой.

Спасибо!
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2711
ВаленокPC,
Потыкайте в упражнения вот тут:
http://www.sql-ex.ru/learn_exercises.php
У меня за полдня пришло примерное понимание, что к чему в эскуеле.
Посетитель
small user social cms
МедальАвторитет форумаПочетный донор проекта
Сообщений: 1360
ВаленокPC, вот тут наглядно будет что означает объединени и т.п.
http://www.skillz.ru/dev/php/article-Obyasnenie_SQL_obedinenii_JOIN_INNER_OUTER.html
Фриланс по Intantcms 1 и 2 версий.Писать в ЛС. Отзывы заказчиков
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.