[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: LEFT JOIN в 3 таблицы
Игорь_Vasinsky
3 таблицы

anonce
tickets
state

anonce и tickets - связь по полю aid
tickets и state связь по полю tid


необходимо из таблицы tickets получить все строки с указанным aid
потом дополнить из таблицы state по полю tid


SELECT anonce.aid, anonce.header, anonce.timestart, anonce.datestart, anonce.placestart, 
tickets.tid,tickets.aid as taid, tickets.block, tickets.row, tickets.place, tickets.number,
state.state as state
FROM `tickets` LEFT JOIN `anonce` ON `tickets`.`aid` = `anonce`.`aid` AND `tickets`.`aid` = 1
LEFT JOIN `state`
ON `state`.`tid` = `tickets`.`tid`


почти сработал :D но оказывается AND `tickets`.`aid` = 1 - не шуршит)



Спустя 25 минут, 12 секунд (17.08.2012 - 12:38) kamanch написал(а):
в SELECT не нужно указывать имена таблиц. Ты же получаешь JOIN, значит итоговую одну таблицу.
Далее anonce.aid и tickets.aid - это же связанные поля, зачем 2 раза в результате?
Это на вскидку. Сейчас раскурю подробнее.

Спустя 8 минут, 6 секунд (17.08.2012 - 12:46) kamanch написал(а):
Пробуй
SELECT aid, header, timestart, datestart, placestart, 
tid, block, row, place, number,
state
FROM `tickets`
LEFT JOIN `anonce` ON (`tickets`.`aid` = `anonce`.`aid`)
LEFT JOIN `state` ON (`state`.`tid` = `tickets`.`tid`)
WHERE `tickets`.`aid` = 1

Спустя 2 минуты, 59 секунд (17.08.2012 - 12:49) Игорь_Vasinsky написал(а):
работает. спс.
тока

Цитата
aid, header, timestart, datestart, placestart,
    tid, block, row, place, number,
      state


с именами таблиц

Спустя 3 минуты, 12 секунд (17.08.2012 - 12:52) Игорь_Vasinsky написал(а):
так. а как дополнить - чтоб если на выдаче 0, то

aid, header, timestart, datestart, placestart с таблицы anonce - все равно вернулись?

Спустя 21 минута, 33 секунды (17.08.2012 - 13:14) kamanch написал(а):
Цитата
с именами таблиц

Только для тех полей, которые более, чем в одной таблице есть. Для остальных и без имен работает. Хотя, при таком большом списке, удобнее с именами, так понятнее.

Цитата
так. а как дополнить - чтоб если на выдаче

Нужно другую прицеплялку, и порядок таблиц изменить, и условие WHERE:
SELECT `anonce`.`aid`, `header`, `timestart`, `datestart`, `placestart`, `tickets`.`tid`, `block`, `row` , `place`, `number`, `state`
FROM `anonce`
LEFT OUTER JOIN `tickets` ON ( `tickets`.`aid` = `anonce`.`aid` )
LEFT JOIN `state` ON ( `state`.`tid` = `tickets`.`tid` )
WHERE `anonce`.`aid` =3


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

Спустя 4 минуты, 24 секунды (17.08.2012 - 13:18) Игорь_Vasinsky написал(а):
понял. спс. как всё сложно и страшно)

Спустя 2 минуты, 30 секунд (17.08.2012 - 13:21) kamanch написал(а):
smile.gif Не, там все логично. Я вообще запросы про себя на русском проговариваю, тогда понятнее smile.gif

Спустя 3 минуты, 18 секунд (17.08.2012 - 13:24) Игорь_Vasinsky написал(а):
я тоже, просто ранее мало практики, щас повалилось всё сразу))

Спустя 7 часов, 9 минут, 8 секунд (17.08.2012 - 20:33) sergeiss написал(а):
По сути вопроса ответили, дайте "пофлудю" чуток.... wink.gif

Цитата (kamanch @ 17.08.2012 - 15:21)
Я вообще запросы про себя на русском проговариваю, тогда понятнее

Лучше на аглицком, потому что потом с аглицкого на SQL легче переводить tongue.gif

Спустя 1 час, 36 минут, 38 секунд (17.08.2012 - 22:10) Krevedko написал(а):
А я щас орм ковыряю. Вообще сказка.
Прописал связи, а потом сидишь и получаешь какой-нибудь
$article->name из одной и $article->category->name из другой.

Спустя 57 минут, 19 секунд (17.08.2012 - 23:07) Игорь_Vasinsky написал(а):
о не... меня всегда пугал оо варант.. я как консерватор практикую исключите процедурный стиль wink.gif


_____________
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
Быстрый ответ:

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