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";
  }
4

2 回答 2

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

顺便说一句,您的 PHP 代码正在选择一个不在您的查询中的属性 - Temp 别名应用于子查询)。

但是,根据您提供的信息,可以得出的唯一可能结论是您的数据库未标准化 - 因此正确的解决方案是标准化您的数据库。

于 2013-03-23T22:43:22.833 回答
-1

使用不同的:

 SELECT DISTINCT Mood AS var FROM Music
 SELECT DISTINCT Mood2 AS var FROM Music
于 2013-03-23T21:54:01.423 回答