![](/img/trans.png)
[英]Select all the roles for a user based on a cross reference table. PDO MySQL sub-query or JOIN
[英]MySQL Query to select 5 records from a join in a sub-query
作為Stackoverflow的好朋友,我目前正在為我的最新項目中的一小部分苦苦掙扎。
目前正在使用圖片庫。
為簡單起見,我有兩個表:
**albums**
album_id, album_title
**media**
media_id, album_id, media_title
我需要顯示5張專輯的列表,並且每張專輯最多顯示該專輯中的5種媒體。
因此,我希望查詢選擇5個專輯,然后最多選擇5個具有相同album_id的媒體項目
我想以盡可能少的查詢數和最佳性能來執行此操作(因此我已經通過僅獲取所有專輯,獲取所有媒體然后循環瀏覽它們來完成這項工作,但是如果有的話這是不可擴展的)相冊包含數百種媒體項目)。
我一直很感謝我在這里提供的出色幫助。 謝謝。
您可以使用group_concat()
將媒體放在逗號分隔的列表中:
select a.*,
substring_index(group_concat(distinct m.media_title), ',', 5)
from albums a join
media m
on a.album_id = m.album_id
group by a.album_id
limit 5;
舉例來說...
CREATE TABLE colours(colour_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,colour VARCHAR(20) NOT NULL);
INSERT INTO colours VALUES (1,'red'),(2,'orange'),(3,'yellow'),(4,'green'),(5,'blue'),(6,'indigo'),(7,'violet');
CREATE TABLE things
(thing VARCHAR(20) NOT NULL PRIMARY KEY,colour VARCHAR(20));
INSERT INTO things VALUES
('tomato','red'),
('cherry','red'),
('heart','red'),
('ferrari','red'),
('chrysanthemum','orange'),
('orange','orange'),
('banana','yellow'),
('lemon','yellow'),
('sunflower','yellow'),
('caterpillar','green'),
('cucumber','green'),
('grass','green'),
('sky','blue'),
('suede shoes','blue'),
('bluebell','blue'),
('indigo bunting','indigo'),
('violets','violet');
SELECT c.colour
, y.thing
FROM colours c
JOIN things x
ON x.colour = c.colour
JOIN things y
ON y.colour = x.colour
AND y.thing <= x.thing
WHERE c.colour_id <=3
GROUP
BY c.colour,x.thing
HAVING COUNT(*) <=3
ORDER
BY colour_id;
+--------+---------------+
| colour | thing |
+--------+---------------+
| red | cherry |
| red | cherry |
| red | cherry |
| orange | chrysanthemum |
| orange | chrysanthemum |
| yellow | banana |
| yellow | banana |
| yellow | banana |
+--------+---------------+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.