![](/img/trans.png)
[英]How do I get rows to correspond to other rows based on a parent_id , all from the same table
[英]mysql get all other rows how have same id from same table
我有两张桌子!
歌曲:
|---------------------|------------------|------------------|
| Title | ID | Version |
|---------------------|------------------|------------------|
| songnumber1 | 34 | original |
|---------------------|------------------|------------------|
| songnumber2 | 35 | remix |
|---------------------|------------------|------------------|
| songnumber3 | 36 | remix |
|---------------------|------------------|------------------|
而且我还有Other表可以在歌曲参考之间进行参考:
|---------------------|------------------|------------------|
| ID | remix | original |
|---------------------|------------------|------------------|
| 1 | 35 | 34 |
|---------------------|------------------|------------------|
| 2 | 36 | 34 |
|---------------------|------------------|------------------|
我想要的是在当前歌曲的下面显示相关的歌曲,假设$ id是当前歌曲的ID,即35,我想显示所有其他歌曲的混音和原始歌曲,我也尝试过此操作,但是如果$ id是混音:
SELECT * FROM reference
INNER JOIN songs ON reference.remix = songs.id OR
reference.original = songs.id
WHERE reference.original = '$id' OR reference.remix = '$id'
我认为这是您想要的:
SELECT * FROM reference r
INNER JOIN songs a ON r.remix = a.ID
INNER JOIN songs b ON r.original = b.ID
WHERE r.remix = 35
如果您发布预期的结果,将会有所帮助。 也许这就是您想要的:
SELECT * FROM reference r
INNER JOIN Songs a ON r.remix = a.ID
WHERE r.remix = 35
UNION
SELECT * FROM reference r
INNER JOIN Songs b ON r.original = b.ID
WHERE r.remix = 35
尝试这个:
SELECT
C.currently_playing,
GROUP_CONCAT(DISTINCT IF(C.currently_playing=C.id,C.title,null)) current_song_title,
GROUP_CONCAT(DISTINCT IF(C.version='original',C.id,null)) orignial_song_id,
GROUP_CONCAT(DISTINCT IF(C.version='original',C.title,null)) orignial_song_title,
GROUP_CONCAT(DISTINCT IF(C.version='remix',C.id,null)) related_remix_ids,
GROUP_CONCAT(DISTINCT IF(C.version='remix',C.title,null)) related_remix_titles
FROM
(SELECT 35 AS currently_playing, A.*
FROM Songs A
RIGHT JOIN (SELECT * FROM `references` WHERE remix=35 or original=35) B
ON A.id IN (B.original,B.remix)) C
GROUP BY C.currently_playing;
请参阅有关SQL Fiddle的有效演示 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.