2011-02-02 5 views
3

Я пытаюсь написать заявление о соединении, но обнаруживаю, что запрос, который я запускаю, выводит ту же информацию для каждого найденного названия. Кажется, мне нужно объединить таблицы на нескольких полях, и я не уверен, что это возможно? Это немного сложно объяснить, но приведенный ниже код показывает, что я пытаюсь выполнить и что происходит на самом деле ... Надеюсь, кто-то сможет указать мне в правильном направлении?mysql - можно присоединиться к нескольким полям?

+----------------------------------------------------+ 
TABLE: NODE N 
+----------------------------------------------------+ 
nid | vid | type | language | title  | uid 
22196 | 22196 | einfo | en  | Contact 15 | 15 
22040 | 22040 | fmp | en  | John Doe | 15 
22043 | 22043 | fmp | en  | Jane Doe | 15 

+----------------------------------------------------+ 
TABLE: CONTENT_FIELD_PN P 
+----------------------------------------------------+ 
vid | nid | delta | field_name_nid 
22196 | 22196 |  0 |   22040 
22196 | 22196 |  1 |   22043 


+----------------------------------------------------+ 
TABLE: CONTENT_FIELD_PP PP 
+----------------------------------------------------+ 
vid | nid | delta | field_homephone_value 
22196 | 22196 |  0 | 6505551212 
22196 | 22196 |  1 | 6505551444 

Я пытаюсь написать присоединиться заявление, которое будет производить:

+----------------------------------------------------+ 
TRYING TO OUTPUT 
+----------------------------------------------------+ 
title  | field_homephone_value | delta 
John Doe | 6505551212   | 0 
Jane Doe | 6505551444   | 1 

+----------------------------------------------------+ 

Что сейчас ВЫВОД

+----------------------------------------------------+ 
title  | field_homephone_value | delta 
John Doe | 6505551212   | 0 
Jane Doe | 6505551212   | 1 

+----------------------------------------------------+ 
THE QUERY AS IT'S CURRENTLY WRITTEN 
+----------------------------------------------------+ 

SELECT p.field_name_nid, n2.title, p.delta, pp.field_homephone_value 
FROM node n 
LEFT JOIN content_field_pn p ON n.nid = p.nid 
LEFT JOIN node n2 ON p.field_name_nid = n2.nid 
LEFT JOIN content_field_pp pp ON p.nid = pp.nid 
WHERE n.nid = 22196 
GROUP BY p.delta 

ответ

14

Вы можете использовать and в редакции on:

LEFT JOIN content_field_pp pp ON p.nid = pp.nid AND p.vid = pp.vid 
               ^^^^^^^^^^^^^^^^^^ 
+0

Ах! Большое спасибо – WonderBugger

+0

Человек, я пропустил его на 1 минуту! – KOGI

+0

@KOGI: Думаю, ты избил меня на 1 минуту. Возможно, мой ответ принят, потому что он использует определения таблицы из вопроса. – Andomar

3

Вы можете присоединиться на несколько полей ...

SELECT `blah` FROM `a` LEFT JOIN `b` ON `b`.`id` = `a`.`id` AND `b`.`field2` = `a`.`field2` 
Смежные вопросы