2013-03-23 74 views
0

我有2列對應於從音樂相關數據庫的心情 - 心情,情緒2所有可能的行沒有重複

我想返回所有可能的行沒有重複。在這個網站上遇到類似的答案我已經改編了一個查詢如下,但仍然沒有得到任何可見的結果。

$resultMOODinner = mysql_query 

("SELECT (var) FROM (
    SELECT Mood AS var FROM Music 
    UNION 
    SELECT Mood2 AS var FROM Music 
        ) 
AS Temp "); 

while ($rowMOOD2 = mysql_fetch_array($resultMOODinner, MYSQL_ASSOC)) 
    { 
$Mood = $rowMOOD2["Temp"]; 
echo "$Mood"; 
    } 
+0

你不是說,從選擇數據,表格和你的語法似乎是錯誤的 – NoLiver92 2013-03-23 21:52:57

回答

-1

使用DISTINCT:

SELECT DISTINCT Mood AS var FROM Music 
SELECT DISTINCT Mood2 AS var FROM Music 
+0

否 - DISTINCT應該在外部查詢:SELECT DISTINCT'var' FROM(SELECT心情VAR從音樂 UNION SELECT Mood2 AS變種FROM Music)作爲臨時文件 - 但它將更有效地轉換來自表格上單次傳送的數據。 – symcbean 2013-03-23 22:38:27

0

按照其他地方的意見,在簡單解決方案是使用SELECT DISTINCT:

SELECT DISTINCT var 
FROM (
     SELECT Mood AS var FROM Music 
     UNION SELECT Mood2 AS var FROM Music 
) as temp 

但是這有拖網數據庫兩次 - 但是數據庫的全部重點在於它能夠管理大量數據 - 您應該很少一次查看所有數據 - 事實上,您應該激活尋求其他解決方案。但無論這個現在,一個更高效解決方案是隻能讀取一次數據:

SELECT DISTINCT IF (mult.val='A', mood, mood2) 
FROM music, 
(SELECT 'A' UNION SELECT 'B') mult 

BTW你的PHP代碼中選擇這是不是在您的查詢的屬性 - 臨時別名應用到子查詢)。

但是根據您提供的信息,可以得出的唯一可能結論是您的數據庫未歸一化 - 因此正確的解決方案是規範化數據庫。

+0

我使用最初的代碼在最後工作。感謝您指出不必要的使用temp屬性,我將其更正爲var。我設法得到一個輸出,但不得不爲每個查詢行插入WHERE子句以使其正常工作,但我不是100%滿意的: SELECT DISTINCT var FROM( SELECT Mood AS var,FixedID as FixedID FROM Music Where AlbumID ='「。$ VAR8。」'AND Album ='「。$ VARAlbum2。」' UNION SELECT Mood2 AS var,FixedID as FixedID FROM Music Where AlbumID ='「。$ VAR8。」'AND AND ='「。$ VARAlbum2。」' )AS var「); – Richard 2013-03-24 03:01:56

+0

抱歉,回覆帖子的格式很難看,我還是習慣了這個論壇。 – Richard 2013-03-24 03:11:02