Запрос с двух таблиц

robinner

Новичок
Всем привет!
Сделал запрос, выводит почти правильно, но не совсем

Есть две таблицы:

Таблица каталог
id | lock | brand | model | price | format | des | detail | presence | status
1 | 1_1 | brand | model | 100 | gif | des | detail | в наличии | 1
2 | 1_2 | brand | model | 100 | gif | des | detail | в наличии | 0
3 | 1_2 | brand | model | 100 | gif | des | detail | в наличии | 1

Таблица меню

id | lock | num | section | subsection | status
1 | 1 | 1 | section | subsection | 1
2 | 1 | 2 | section | subsection | 0
3 | 1 | 3 | section | subsection | 1

вот мой запрос:

SELECT `catalogue`.`lock`, `menu`.* FROM `menu` JOIN `catalogue` ON `menu`.`lock` = `catalogue`.`lock` WHERE `menu`.`status` = '1' GROUP BY `menu`.`id`
lock каталога = lock_num таблицы меню
Этот запрос выводит 1 и 3 строку из таблицы меню, хотя в каталоге нету lock 1_3
А надо чтобы выводило только те строки из меню у которых статус 1 и для которых есть строки(lock каталога = lock_num) со статусом 1 в таблице каталог

Помогите плиз...
 

Lakr

Новичок
я так понял что не хватает проверки "lock каталога = lock_num таблицы меню" и по условию задачи должна выбираться только первая запись что-то типа WHERE `menu`.`status` = '1' and `catalogue`.`lock` = " `menu`.`lock`+'_'+`menu`.`num` " почти уверен что работать не будет из-за синтаксиса наугад, просто для наглядности что должно быть
 

robinner

Новичок
да, я тоже так думаю ----- `catalogue`.`lock` = " `menu`.`lock`+'_'+`menu`.`num` "
а вот как правильно написать не знаю
 

Lakr

Новичок
SELECT catalogue.lock, menu.* FROM menu JOIN catalogue ON menu.id = catalogue.id WHERE menu.status = '1' and catalogue.lock = CONCAT(menu.lock, '_', menu.num) - во так работает правда я не уверен насчёт правильности menu.id = catalogue.id
 

robinner

Новичок
Lakr
Спасибо, это то что нужно!!!!

menu.id = catalogue.id - вот это там не нужно по задаче...Но зато вот это `catalogue`.`lock` = CONCAT(menu.lock, '_', menu.num) как раз то,что надо!)))

Таким образом имеем запрос такого вида

SELECT `catalogue`.`lock`, `menu`.* FROM `menu` JOIN `catalogue` ON `menu`.`lock` = `catalogue`.`lock` WHERE `menu`.`status` = '1' AND `catalogue`.`status` = '1' AND `catalogue`.`lock` = CONCAT(menu.lock, '_', menu.num) GROUP BY `menu`.`id`

Спасибо большое!!!
 
Сверху