2014-04-27 27 views
0

我有这个疑问:MySQL的分配中的var SELECT而不是显示它

SET @id := ''; 
SELECT 
    libs.song_id, 
    songs.name AS song_name, 
    artists.id AS artist_id, 
    artists.name AS artist_name, 
    songs.description, 
    libs.status, 
    libs.activated, 
    libs.giftable, 
    @id := libs.song_id, 
    IF((SELECT activated FROM libs WHERE @id = song_id && activated = 1), 1, 0) AS duplicate 
FROM libs, songs, artists 
WHERE 
    libs.song_id = songs.id && 
    artists.id = songs.artist_id && 
    libs.activated = 0 && 
    libs.user_id = '1'; 

一切按计划进行,但我也得到一个名为@id := libs.song_id专栏中,我怎么能避免呢?
谢谢。

回答

1

首先有几件事。学习使用正确的连接语法。一个简单的规则:只要不在from子句中使用逗号。

其次,您甚至不必将变量初始化为单独的语句。

三,想法很简单。刚分配变量。另一种表达,有一个很自然的地方来做到这一点:

SELECT (@id := libs.song_id) as song_id, 
     songs.name AS song_name, artists.id AS artist_id, artists.name AS artist_name, 
     songs.description, libs.status, libs.activated, libs.giftable, 
     IF((SELECT activated FROM libs WHERE @id = song_id AND activated = 1), 1, 0) AS duplicate 
FROM libs join 
    songs 
    on libs.song_id = songs.id join 
    artists 
    on artists.id = songs.artist_id 
WHERE libs.activated = 0 AND libs.user_id = '1'; 
+0

是啊,我发现我自己的SET语句是无用的。谢谢! – Xriuk

相关问题