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

他のコメントによると、最も簡単な解決策はSELECTDISTINCTを使用することです。

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

ただし、これはデータベースを2回トロールする必要があります。ただし、データベースの要点は、大量のデータを管理することです。一度にすべてのデータを確認することはめったにありません。実際、他のソリューションを積極的に探す必要があります。しかし、今のところこれを無視すると、はるかに効率的な解決策は、データを1回だけ読み取ることです。

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

DISTINCT を使用:

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