2012-07-06 66 views
0

我有6個表:用戶,期刊,文件,標誌,flag_details
MySQL的6張桌子一起參加一個查詢

users (id, avatar, fullname) 
journals (id, container, container_id, user_id, title) 
files (id, container, container_id, user_id, title) 
flags (id, container, container_id, total) 
flag_details (id, container, container_id, reason, comment, user_id) 
trend_item (id, container, container_id, user_id) 

關係爲:

if(flags.container='look') then flags.container_id = journals.id 

所以我從所有記錄期刊表

if(flags.container='photo') then flags.container_id = files.id 

所以我把所有記錄從fi萊表

if(flags.container='trend') then flags.container_id = trend_item.id 

,所以我需要的所有記錄從trend_item表

所以我的看法是這樣的:

ID |容器|東西|總標記
1 |看| | 123 - guy | 2
2 |照片| 321 - budi | 4
3 |趨勢| 345 - elvis | 3
4 |看| | 876 - 罐| | 6

,所以我得到了這樣的查詢:

SELECT DISTINCT (id), created_at, container, IF(container = 'look', (

SELECT a.container_id 
FROM flags a, journals b 
WHERE a.container_id = b.id 
), IF(container = 'photo', (

SELECT a.container_id 
FROM flags a, files b 
WHERE a.container_id = b.id 
), (

SELECT a.container_id 
FROM flags a, trend_items b 
WHERE a.container_id = b.id 
))) , total, 
`status` 
FROM flags 
ORDER BY created_at DESC 

但答案是子查詢回報多於排

更多有任何可能的,如果這一切在一個查詢放在一起?
對不起我的英語很差

感謝大家!

回答

0

我想你可以放心地加入所有這些表用一個單一的查詢,像這樣:

SELECT fl.* 
     FROM flags fl 
LEFT JOIN journals jo 
     ON fl.container_id = jo.id AND fl.container = 'look' 
LEFT JOIN files fi 
     ON fl.container_id = fi.id AND fl.container = 'photo' 
     ... 

下面是a demo東西,說明這個概念。

+0

mysql返回空結果集,有沒有其他的想法? – 2012-07-06 10:09:22

+0

該死的,我的壞。 )當然,在這種情況下應該使用LEFT JOIN。 – raina77ow 2012-07-06 10:58:09

+0

沒問題,有沒有其他的想法和解決辦法? – 2012-07-07 02:16:12

0
SELECT t6.username AS username, MAX(t1.earn_status) AS genx, MAX(t2.earn_status) AS grnplus, MAX(t3.earn_status) AS genpower, MAX(t4.earn_status) AS genpro, MAX(t5.earn_status) AS geextra 
FROM genx_commission t1 
    LEFT JOIN gen_plus_commission t2 ON (t1.user_id = t2.user_id) 
    LEFT JOIN gen_power_commission t3 ON (t1.user_id = t3.user_id) 
    LEFT JOIN gen_pro_commission t4 ON (t1.user_id = t4.user_id) 
    LEFT JOIN gen_extra_commission t5 ON (t1.user_id = t5.user_id) 
    LEFT JOIN users t6 ON (t1.user_id = t6.id) 
WHERE t1.user_id =1654 
+0

這是工作:-) – Niya 2017-02-02 11:47:28