2015-09-16 4 views
0

У меня есть одна таблица, которая хранит данные причудливо - я не могу изменить структуру таблицы или в самой базе данных, я должен работать с этими данными:MySQL - Включение 3 строки в 3 колонки

мне нужно, чтобы включить эти данные:

NID  SID  CID  DATA 
1000  10   1   This 
1000  10   2   is 
1000  10   3   data 
1000  11   1   This 
1000  11   2   is 
1000  11   3   lore 
1000  12   1   This 
1000  12   2   is 
1000  12   3   picard 

в это:

This  is  data 
This  is  lore 
This  is  picard 

Но я не могу показаться, чтобы выяснить только, как присоединиться к этой вещи вместе, это не щелкая в моем мозгу.

Могу ли я иметь несколько операторов SELECT, чтобы свести это вместе? Что-то вроде

SELECT data FROM submitted WHERE nid='1000' AND cid='1' AS col1 
SELECT data FROM submitted WHERE nid='1000' AND cid='2' AS col2 
SELECT data FROM submitted WHERE nid='1000' AND cid='3' AS col3 

И тогда мой PHP код может быть столь же просто, как

print ("<tr> 
<td>$row[col1]</td> 
<td>$row[col2]</td> 
<td>$row[col3]</td> 
</tr>"); 

Я не думаю, что MySQL принимает "AS" после "WHERE". Прошло много лет с тех пор, как я коснулся MySQL, поэтому я очень ржавый, спасибо за любую помощь.

+0

Просто использовать простой PHP петлю – Strawberry

+0

возможный дубликат [Могу ли я объединить несколько строк MySQL в один поле?] (http://stackoverflow.com/questions/276927/can-i-concatenate-multiple-mysql-rows-into-one-field) – harris

ответ

0

Это должно сделать трюк, поскольку GROUP_CONCAT игнорирует аннулирует, если они не являются единственными значениями обрабатываемые:

SELECT SID 
, GROUP_CONCAT(IF(CID=1, DATA, NULL)) AS d1 
, GROUP_CONCAT(IF(CID=2, DATA, NULL)) AS d2 
, GROUP_CONCAT(IF(CID=3, DATA, NULL)) AS d3 
FROM submitted 
WHERE NID = 1000 
GROUP BY SID 
; 

Примечание: в том числе SID в результатах полностью не обязательно, и только на основании моих собственных личных принуждений. ;)

Если вы на самом деле не нужны они в отдельных полях результата, это было бы проще:

SELECT SID, GROUP_CONCAT(DATA ORDER BY CID SEPARATOR ' ') 
FROM submitted 
WHERE NID = 1000 
GROUP BY SID 
; 
+0

Это замечательно! Я действительно нуждался в том, чтобы они были в разных областях, этот 100% решил это для меня. Благодаря! – sittal

Смежные вопросы