2014-02-13 6 views
0

У меня есть 2 таблицыИзвлечение данных из таблиц 2

table1 

eventcode  mobile   points name 
------------- 
CAMTRIP   82074626   10  SS 
TARANAKI  91262063   30  JL 
CAMTRIP   91262063   10  JL 

и TABLE2

passcode serial remark 
---------- 
TARANAKI  1 NZ 
CAMTRIP   2 Cameroon 

Я хочу, чтобы выход в

Cameroon 
NAME Points 
---------- 
SS 10 
JL 10 

NZ 
---------- 
JL 30 

Я пытаюсь

SELECT (b.name)  name, 
     (b.points) point, 
     (b.eventcode) ecode, 
     (c.remark) rem 
FROM table1 b, 
     table2 c 
WHERE c.passcode = b.eventcode 
GROUP BY b.eventcode 

Я не получаю желаемого результата. что не так?

+0

ли вы редактируете вопрос включить желаемый результат, пожалуйста? –

ответ

3

Так что я предполагаю, что реальный результат вам нужен:

Remark Name Points 
---------------------- 
Cameroon SS 10 
Cameroon JL 10 
NZ  JL 30 

Создание заголовков групп Cameroon и NZ должно быть сделано в клиенте. Запрос на это будет:

SELECT t2.Remark, t1.Name, t1.Points 
FROM table2 t2 
INNER JOIN table1 t1 ON t2.passcode = t1.eventcode 

Просто JOIN на общем поле, а затем SELECT любые поля, которые вы хотите от каждой таблицы.

+0

Зачем идти с таблицей2 и внутренним соединением в таблице1 вместо использования таблицы1 и левого соединения с таблицей2. Я подозреваю, что OP захочет получить результаты, в которых «Замечание» также не задано. В противном случае мы полностью на той же странице, что и презентация, а не работа db. – Anthony

+0

Но замечание - это заголовок его группы, поэтому мне показалось более вероятным, что все результаты должны соответствовать заголовку. В любом случае только ОП может знать, чего он хочет. Для предоставленных данных оба соединения производят один и тот же результат, поэтому нет возможности узнать, кроме угадывания. – OGHaza

+0

Спасибо, это работает для меня. Если бы я хотел бы развернуть представление таблицы с замечаниями в виде строк и точек, перечисленных ниже. Как мне это сделать? замечания динамически добавляются. – user3305121

0

попробовать:

$query = "Select b.name as name, b.points as points, b.eventcode as ecode, c.remark as rem from table1 b join table2 c ON (c.passcode=b.eventcode) group by b.eventcode"; 
+2

То, что вернет тот же результат – OGHaza

0
SELECT b.name as name, 
     b.points as point, 
     b.eventcode as ecode, 
     GROUP_CONCAT(DISTINCT c.remark.has SEPARATOR ", ") as rem 
FROM table1 b 
left outer join table2 c on c.passcode = b.eventcode 
GROUP BY c.passcode 
+0

Даже это дает тот же результат. –

0

Попробуйте один

select table2.remark,table1.name,table1.points from table1,table2 where 
table1.eventcode=table2.passcode 
0

Там нет реальной причины в ответ базы данных, чтобы нужно разбить строки замечанием, так как это было бы только на пользу человеческого пользователя, глядя на результаты, что не является ответом. Нарушение результатов во что-то более легкое для просмотра должно выполняться с помощью слоя пользовательского интерфейса. Имея это в виду следующее получите результаты, которые вы имеете в виду, так что какой-то другой процесс может легко подготовить данные для отчета:

SELECT remark, name, points 
FROM table1 
LEFT JOIN table2 ON eventcode = passcode 

Что бы вернуть:

remark  name points 
------------------------ 
Cameroon SS 10 
Cameroon JL 10 
     NZ JL 30 
Смежные вопросы