簡體   English   中英

MySQL選擇行和分組

[英]MySQL Selecting Rows and Grouping

我有一個名為field_values的(Joomla)數據庫表,其內容如下;

+----+----------+---------+---------+
| id | field_id | item_id | value   |
+----+----------+---------+---------+
| 1  | 2        | 446     | Jones   |
| 2  | 2        | 447     | Smith   |
| 3  | 2        | 448     | Jenkins |
| 4  | 3        | 446     | Paul    |
| 5  | 3        | 447     | Peter   |
| 6  | 3        | 448     | Sally   |
| 7  | 4        | 446     | London  |
| 8  | 4        | 447     | Dublin  |
| 9  | 4        | 448     | Paris   |
+----+----------+---------+---------+

我只顯示表中的9行,但實際上有數千行,因此成功查詢需要考慮到這一點。

專欄說明;

  • id(主要/自動遞增)
  • field_id(FK到另一個fields表, 2 =姓, 3 =名字, 4 =位置)
  • item_id(FK到另一個users表)
  • 值(字段內容)

如何從上表中選擇所有值,但顯示如下:

+------------+-----------+----------+
| first_name | last_name | location |
+------------+-----------+----------+
| Paul       | Jones     | London   |
| Peter      | Smith     | Dublin   |
| Sally      | Jenkins   | Paris    |
+------------+-----------+----------+

id字段在上面想要的結果中並不是必需的,我只是添加了它以強調每一行都是唯一的。

我不確定是否需要使用子查詢或分組依據,也許兩者都不用?

提前致謝。

樞紐查詢應該在這里工作:

SELECT
    MAX(CASE WHEN field_id = 3 THEN value END) AS first_name,
    MAX(CASE WHEN field_id = 2 THEN value END) AS last_name,
    MAX(CASE WHEN field_id = 4 THEN value END) AS location
FROM yourTable
GROUP BY
    item_id
ORDER BY 
    item_id;

您當前的表結構是非規范化的鍵值存儲,這是WordPress在某些表中使用的樣式。

您可以避免子查詢和麻煩。 您可以在同一張桌子上使用3次

select  a.id, b.value firts_name, a.value last_name , c.value location
from  field_values a 
inner join  field_values b  on a.item_id = b.item_id and b.field_id = 3 
inner join  field_values bc on a.item_id = c.item_id and b.field_id = 4
where a.item_id = 2 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM