|
|
|
| здравствуйте,
есть 2 таблицы
-- objects
id | city
1 | 10
2 | 20
3 | 30
-- selected_eqi
id | obj_id | param_id
1 | 1 | 3
2 | 1 | 4
3 | 2 | 3
4 | 2 | 7
5 | 3 | 4
как из objects выбрать id на основании полного совпадения по param_id ?
то есть если вернулись param_id 3 и 4 и city 10
то надо выдать только id из objects равный 1
что-то типа
SELECT `objects`.id FROM `objects`, `selected_eqi`
WHERE `selected_eqi`.param_id IN (' . implode(',', array_map('intval', $param)) . ')
AND `objects`.city = '.$id.' AND `selected_eqi`.obj_id = `objects`.id GROUP BY `objects`.id DESC
выдаст все id где совпал хоть один param_id
|
| |
|
|
|
|
|
|
|
для: moonfox
(10.11.2014 в 05:19)
| | что есть "если вернулись param_id 3 и 4 и city 10 "?
запрос вырвиглазный, конечно, но обе строки, которые он выдаст, будут соответствовать objects.id=1
Если $id это city.
PS. Вам не совестно? | |
|
|
|
|
|
|
|
для: Trianon
(10.11.2014 в 12:04)
| | SELECT `objects`.id FROM `objects`, `selected_eqi`
WHERE `selected_eqi`.param_id IN (3,4)
AND `objects`.city =10 AND `selected_eqi`.obj_id = `objects`.id GROUP BY `objects`.id DESC
выдает `objects`.id 1, 2, 3
мне нужно чтоб выбрало id если совпало оба условия param_id 3 и 4 | |
|
|
|
|
|
|
|
для: moonfox
(10.11.2014 в 12:40)
| | оба, то есть два?
тогда придется добавить HAVING COUNT(`selected_eqi`.param_id ) = 2 | |
|
|
|
|
|
|
|
для: Trianon
(10.11.2014 в 12:54)
| | работает, спасибо
тогда еще вопрос, а более эстетичнее все это дело оформить можно? | |
|
|
|
|
|
|
|
для: moonfox
(10.11.2014 в 13:53)
| | я Бы поставил честный JOIN ON
и DESC после GROUP BY мине непонятно совсем
SELECT `objects`.id
FROM `objects`
JOIN `selected_eqi` ON `selected_eqi`.obj_id = `objects`.id
WHERE `objects`.city =10 AND `selected_eqi`.param_id IN (3,4)
GROUP BY `objects`.id
HAVING COUNT(`selected_eqi`.param_id)
|
| |
|
|
|
|
|
|
|
для: Trianon
(10.11.2014 в 14:21)
| | опечатка) спс | |
|
|
|