我想檢索同一產品的多個產品元值的資料,但不是在多行中顯示它,而是希望元值作為它們自己的列。
我開始:
SELECT a.post_title, b.meta_key, b.meta_value
FROM wp_posts a
INNER JOIN wp_postmeta b
ON a.ID = b.post_id
WHERE a.post_type = 'product'
AND b.meta_key = '_custom_animal_id'
OR b.meta_key = '_custom_breed';
這將回傳一個表:
| 名稱 | 元密鑰 | 元值 |
|---|---|---|
| 牛 1 | _custom_animal_id | FR4380 |
| 牛 1 | _custom_breed | 何 |
| 奶牛 2 | _custom_animal_id | FR0001 |
| 奶牛 2 | _custom_breed | 何 |
| 牛 3 | _custom_animal_id | FR9999 |
| 牛 3 | _custom_breed | Z Z |
我要顯示的是:
| 名稱 | 動物ID | 品種 |
|---|---|---|
| 牛 1 | FR4380 | 何 |
| 奶牛 2 | FR0001 | 何 |
| 牛 3 | FR9999 | Z Z |
我知道我需要按 post_id 進行分組(因為標題可能不是唯一的)但是將行回傳到我已經搜索過很多但沒有找到答案的列。
uj5u.com熱心網友回復:
您可以嘗試使用條件聚合函式。
MAX與CASE WHEN使樞軸
SELECT a.post_title 'Name',
MAX(CASE WHEN b.meta_key = '_custom_animal_id' THEN b.meta_value END) 'Animal ID' ,
MAX(CASE WHEN b.meta_key = '_custom_breed' THEN b.meta_value END) 'Breed'
FROM wp_posts a
INNER JOIN wp_postmeta b
ON a.ID = b.post_id
WHERE a.post_type = 'product'
AND b.meta_key = '_custom_animal_id'
OR b.meta_key = '_custom_breed'
GROUP BY a.post_title
結果:
| Name | Animal ID | Breed |
|-------|-----------|-------|
| Cow 1 | FR4380 | HO |
| Cow 2 | FR0001 | HO |
| Cow 3 | FR9999 | ZZ |
uj5u.com熱心網友回復:
需要在這里使用一個子查詢來獲得我們需要的東西。如果您還沒有,請確保您在 wp_postmeta.meta_key 上有適當的索引。
SELECT a.post_title, animalid.meta_key, breed.meta_key
FROM wp_posts a
INNER JOIN (SELECT post_id, meta_key
FROM wp_postmeta
WHERE meta_key = '_custom_animal_id') animalid ON a.ID = animalid.post_id
INNER JOIN (SELECT post_id, meta_key
FROM wp_postmeta
WHERE meta_key = '_custom_breed') breed ON a.ID = breed.post_id
WHERE a.post_type = 'product';
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/404818.html
標籤:
下一篇:SQL根據實際/預測洗掉重復項
