繁体   English   中英

MySQL获取所有其他行如何从同一个表具有相同的ID

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM