2013-02-14 53 views
0
SELECT e.ent_seq, 
     GROUP_CONCAT(DISTINCT kei.keb SEPARATOR'; ')AS kebs, 
     GROUP_CONCAT(DISTINCT rei.reb SEPARATOR '; ') AS rebs, 
     GROUP_CONCAT(DISTINCT sei.mean SEPARATOR '; ') AS means, 
FROM entry e 
    LEFT JOIN k_ele kei ON e.entry = kei.entry 
    LEFT JOIN r_ele rei ON e.entry = rei.entry 
    LEFT JOIN sense se ON e.entry = se.entry 
    LEFT JOIN s_gloss_eng sei ON se.SID = sei.SID 
WHERE mn_null = 1 
GROUP BY e.entry 

如何隨機選擇e.entry? e.entry是一個int。如何在Mysql查詢中選擇隨機ID

+0

唉... http://infobot.pl/r/2bct – Spook 2013-02-14 07:58:52

回答

0

您可以使用此解決方案 -

SELECT e.ent_seq, 
     GROUP_CONCAT(DISTINCT kei.keb SEPARATOR'; ')AS kebs, 
     GROUP_CONCAT(DISTINCT rei.reb SEPARATOR '; ') AS rebs, 
     GROUP_CONCAT(DISTINCT sei.mean SEPARATOR '; ') AS means, 
FROM (SELECT * FROM entry ORDER BY RAND() LIMIT 1) e 
    LEFT JOIN k_ele kei ON e.entry = kei.entry 
    LEFT JOIN r_ele rei ON e.entry = rei.entry 
    LEFT JOIN sense se ON e.entry = se.entry 
    LEFT JOIN s_gloss_eng sei ON se.SID = sei.SID 
WHERE mn_null = 1 
GROUP BY e.entry 

添加條件WHERE mn_null = 1e表的別名,如果mn_nullentry表中的字段。

+0

這將是非常緩慢的,如果表'entry'大 – mvp 2013-02-14 07:58:34

+0

是,該解決方案是大表很慢,但很容易理解。還有另外的解決方案,並且所有這些解決方案都可以以相同的方式應用於此查詢。 – Devart 2013-02-14 08:00:06

+0

蘭德()有可怕的表現。 – 2013-02-14 08:01:51

1
SELECT e.ent_seq, 
    GROUP_CONCAT(DISTINCT kei.keb SEPARATOR'; ')AS kebs, 
    GROUP_CONCAT(DISTINCT rei.reb SEPARATOR '; ') AS rebs, 
    GROUP_CONCAT(DISTINCT sei.mean SEPARATOR '; ') AS means 

FROM entry e 

LEFT JOIN k_ele kei ON e.entry = kei.entry 
LEFT JOIN r_ele rei ON e.entry = rei.entry 
LEFT JOIN sense se ON e.entry = se.entry 
LEFT JOIN s_gloss_eng sei ON se.SID = sei.SID 

WHERE e.ent_seq IN (SELECT jt5.jlpt5_seq FROM jlptn5 jt5 
        WHERE jt5.jlpt5_null = 0 
        ORDER BY RAND()) 
GROUP BY e.entry  
ORDER BY RAND() 
LIMIT 20