Как получить записи в следующем сценарии

У меня есть таблица, как показано ниже:

node_name              id            term_name
----------------------------------------------
test1                  001           physics 
test1                  001           maths    
test1                  001           chemistry    
test2                  002           physics    
test2                  002           maths

Учитывая комбинацию имен терминов, я хочу найти все строки, где id набор содержит только точно заданные имена терминов.

Например, учитывая термин имена физика и математика, мой вывод должен быть как ниже

node_name              id            term_name
----------------------------------------------
test2                  002           physics   
test2                  002           maths

Идентификатор установлен 001 содержит также chemistry вот почему это не должно быть включено.

3 ответа

Ваш вопрос: получить все строки, где нет других строк с таким же идентификатором, кроме других term_names существует

SELECT * FROM <table> x WHERE
  term_name IN ('physics','maths') AND
  NOT EXISTS (SELECT * FROM <table> WHERE id=x.id AND term_name NOT IN ('physics','maths'))

Прежде всего, вам нужно проанализировать ваш запрос, чтобы преобразовать оператор "&" в SQL "ИЛИ" в PHP:

//Parse the query
        $arr = explode('&',$query);
    $where = '';
//get the term count
    $count = count($arr);
    foreach($arr as $value){
    $where .= "term_name = '" . $value . "' OR";
    }
    //Remove last or
    $where = rtrim($where,'OR');

тогда: используйте L

"select node_name ,count(1) as Total from my table where $where
group by node_name
having Total =" . $count

В заключение:

Ваш запрос должен быть в следующем формате:

select x,count(1) as total from mytable where field1 = 'term1' or field1 = 'term2' having total = 2

Один из возможных способов сделать это:

select id, node_name 
from nodes join 
  (select id, 
       count(*) 
from nodes
  where node_name in ('physics','math')
group by id
having count(*) = 2 // this is set when generating the query ) as eligible_nodes
  on nodes.id = eligible_nodes.id
Другие вопросы по тегам