Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: выборка по совпадению
 
 автор: moonfox   (10.11.2014 в 05:19)   письмо автору
 
 

здравствуйте,

есть 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

  Ответить  
 
 автор: Trianon   (10.11.2014 в 12:04)   письмо автору
 
   для: moonfox   (10.11.2014 в 05:19)
 

что есть "если вернулись param_id 3 и 4 и city 10 "?

запрос вырвиглазный, конечно, но обе строки, которые он выдаст, будут соответствовать objects.id=1
Если $id это city.

PS. Вам не совестно?

  Ответить  
 
 автор: moonfox   (10.11.2014 в 12:40)   письмо автору
 
   для: 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

  Ответить  
 
 автор: Trianon   (10.11.2014 в 12:54)   письмо автору
 
   для: moonfox   (10.11.2014 в 12:40)
 

оба, то есть два?
тогда придется добавить HAVING COUNT(`selected_eqi`.param_id ) = 2

  Ответить  
 
 автор: moonfox   (10.11.2014 в 13:53)   письмо автору
 
   для: Trianon   (10.11.2014 в 12:54)
 

работает, спасибо

тогда еще вопрос, а более эстетичнее все это дело оформить можно?

  Ответить  
 
 автор: Trianon   (10.11.2014 в 14:21)   письмо автору
 
   для: 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)

  Ответить  
 
 автор: moonfox   (10.11.2014 в 14:33)   письмо автору
 
   для: Trianon   (10.11.2014 в 14:21)
 

опечатка) спс

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования