2010-08-04 3 views
0

У меня есть эти таблицы: доменMysql Query Путаница

  • domain_module
  • domain_module_feature
  • domain_module_feature_to_domain

Домен может иметь много domain_module_feature (ов), то domain_module_feature_to_domain таблица содержит 3 столбца - dmf_id, dmf_domain_id и dmf_feature_id. Для удобства этого примера допустим, что домен имеет всего 2 столбца - dm_id и dm_name.

Я хочу разрешить «расширенный» поиск, где я могу видеть, какие домены используют какие функции, например, имеет функции 1 и 2, но не функцию 3. По какой-то причине я вообще не могу обойти эту проблему.

я предполагаю, что псевдо-SQL будет somethink как:

SELECT * FROM `domain` 
LEFT JOIN domain_module_feature_to_domain ON (`dm_id` = `dmf_domain_id`) 
WHERE `dmf_feature_id` = '1' AND `dmf_feature_id` = '2' AND `dmf_feature_id` != '3' 

Можете ли вы помочь?

Спасибо.

ответ

1

Что-то вдоль линий ...

SELECT * 
    FROM `domain` 
    WHERE EXISTS (SELECT * 
         FROM domain_module_feature_to_domain 
         WHERE dm_id   = dmf_domain_id AND 
          dmf_feature_id = 1)     AND 
      EXISTS (SELECT * 
         FROM domain_module_feature_to_domain 
         WHERE dm_id   = dmf_domain_id AND 
          dmf_feature_id = 2)     AND 
      NOT EXISTS (SELECT * 
          FROM domain_module_feature_to_domain 
          WHERE dm_id   = dmf_domain_id AND 
           dmf_feature_id = 3); 

Edit: потребности имеют 1 и 2, а не 1 или 2.

+0

, но она должна иметь dmf_feature_id от 1 * и * 2 не 1 * или * 2 – robjmills

+0

Моя ошибка. Я отредактировал свой ответ соответственно. –