2012-09-26 26 views
8

私は1列に複数の値を選択しようとしています。基本的に私は、私はこのクエリを実行しているクエリが値Software_1YXI_1YP1_1Y同じ列で複数の値を選択するにはどうすればよいですか?

でカラムfamilyの下にすべてのそれらを選択します:

SELECT `salesorder` 
    ,`masterproduct` 
    ,`family` 
    ,`birthstamp` 
    ,`duedate` 
    ,COUNT(*) AS `total` 
FROM `report` 
WHERE `birthstamp` BETWEEN '$startDT' 
     AND '$endDT' 
    AND `family` = 'Software_1Y' 
    AND `family = 'XI_1Y' 
    AND `family` = 'PI_1Y' 
GROUP BY `salesorder` 
    ,`masterproduct` 
    ,`family` 
    ,`duedate`; 

私のクエリが行を戻さないが、私は1によって各家庭1を検索しています、私は価値がある。

は私のクエリの何が問題になっているのですか?

また、familyの値がSoftware_1Y,XI_1YPI_1Yのすべての行を取得することを目的としています。

+0

'IN'を使用するか、' \ 'family \' = 'Software_1Y'または\ 'family \' = 'XI_1Y' OR \ 'family \' = 'PI_1Y'' – hjpotter92

+0

私が間違っている場合は私を修正しますが、私が 'OR'を使用すると、私は単一行しか得られません。私の目的は、それらの 'family'値を持つすべての行を取得することです。 – Jude

答えて

10

どのように何の値が返されない理由の代わりに、IN

SELECT `salesorder`, 
     `masterproduct`, 
     `family`, 
     `birthstamp`, 
     `duedate`, 
     COUNT(*) AS `total` 
FROM `report` 
WHERE `birthstamp` BETWEEN '$startDT' AND '$endDT' 
AND  `family` IN ('Software_1Y','XI_1Y','PI_1Y') 
GROUP BY `salesorder`, 
      `masterproduct`, 
      `family`, 
      `duedate`; 

を使用する方法について、なぜならこのセクションの

AND `family` = 'Software_1Y' 
AND `family = 'XI_1Y' 
AND `family` = 'PI_1Y' 

familyは、一度にすべての3つの値にはできませんが、それは1であるかもしれません3つの値のうちの1つ。あなたはINを使用する理由である

。それを見て

もう一つの方法は、ORを使用することですが、それは本当に長いったらしい取得します。

+2

これは、SQLにエラーがあったことを意味します。 mysql_queryからエラーをチェックしないでください。エラーメッセージは、あなたの間違いがどこにあったかを示すはずです。 – Barmar

+0

ありがとう@Barmar、私の間違いを見た、愚かなもの。申し訳ありません:Dhaha ... – Jude

+0

これは、このタイプのクエリに関するはるかに優れた説明です。おかげであなたはおそらく、論理和の周りにいくつかの括弧をつけたいと思う –

1
$query=" SELECT `salesorder`,`masterproduct`,`family`,`birthstamp`,`duedate`, COUNT(*) AS `total` FROM `report` 
    WHERE `birthstamp` BETWEEN '$startDT' AND '$endDT' 
      AND (`family` = 'Software_1Y' 
      OR `family` = 'XI_1Y' 
      OR `family` = 'PI_1Y') 
    GROUP BY `salesorder`,`masterproduct`,`family`,`duedate` "; 

FAMILY列を照会するときにORの代わりにANDを使用する必要があります。

$result = mysql_query($query); 
while ($row = mysql_fetch_array($result)) 
{ 
//Operation you want to perform 
} 

@jude:それはあなたが直接、間違っては、mysql_fetch_arrayするパラメータとして直接文字列型であるクエリを渡しているようです。代わりに上記の方法に従います...

+1

... AND( 'family' = 'Software_1Y' または'家族= 'XI_1Y' または 'family' = 'PI_1Y') –

+0

@astander astander:うん...それは私の心にも来ました。しかし、私は本当にこの特定の場合の状態に影響を与えるだろうと思った? –

+0

はい、それは間違いなく、あなたが持っているとして、それは事業者の順番は=( '$ startDT' AND '$ endDT' と 'family' = 'Software_1Y')や' family' = 'XI_1Y' または 'family'になります'PI_1Y' –

関連する問題