2013-03-23 73 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