這裏是我的2個表,ID爲內連接事件。我想做這件事:mysql group by table b,inner join table a for a random
在表b中,有10 albums
,我想隨機出去4 albums
。那麼each album
選擇one record
,該記錄是在專輯中的隨機位置。
這樣我就會得到4條記錄回到(these 4 records with no duplicate id)
,然後把這4條記錄作爲內部聯接查詢,從table a
得到title
。
這裏只是爲了測試的小記錄。實際上,我在表a中有300,000條記錄,在表b中有200萬條記錄。
表
+-----+-------+
| id | title |
+-----+-------+
| 1 | a1 |
+-----+-------+
| 2 | a2 |
+-----+-------+
| 3 | a3 |
+-----+-------+
| 4 | a4 |
+-----+-------+
| 5 | a5 |
+-----+-------+
| 6 | a6 |
+-----+-------+
表B
+-----+--------+
| id | album |
+-----+--------+
| 1 | album1 |
+-----+--------+
| 2 | album1 |
+-----+--------+
| 3 | album1 |
+-----+--------+
| 6 | album1 |
+-----+--------+
| 2 | album2 |
+-----+--------+
| 3 | album2 |
+-----+--------+
| 5 | album3 |
+-----+--------+
| 6 | album3 |
+-----+--------+
| 3 | album4 |
+-----+--------+
| 2 | album5 |
+-----+--------+
| 4 | album5 |
+-----+--------+
| 5 | album5 |
+-----+--------+
| 1 | album6 |
+-----+--------+
| 3 | album6 |
+-----+--------+
| 2 | album7 |
+-----+--------+
| 4 | album7 |
+-----+--------+
| 1 | album8 |
+-----+--------+
| 5 | album8 |
+-----+--------+
| 3 | album9 |
+-----+--------+
| 2 | album10|
+-----+--------+
| 5 | album10|
+-----+--------+
我不擅長MySQL查詢。在我心中,我會做
select * from b group by album order by random() limit 0,4
回來4張專輯,然後做一個內部聯接查詢(此查詢不正確的,如何檢查b.id沒有重複?)
select * from b inner join a on b.id = a.id where (select id from b where b.album = '".$row['album']."' order by random() limit 1)
我需要一個簡單而快捷的方法,最好的方法就是使用一個查詢。非常感謝。
如果我讀的是正確的,你」我喜歡從你的專輯列表中隨機挑選10張專輯,然後從這10張專輯中隨機挑選一首曲目? –
換句話說,你想隨機選擇4首曲目(這又可以讓你選擇專輯),但是沒有兩首曲目可以屬於同一專輯? –
@Marc B,是的,每個曲目都沒有重複的id。 –