2012-09-26 68 views
8

我想在一列中選擇多個值。基本上我想查詢以選擇下family列的所有那些具有價值Software_1YXI_1YP1_1Y如何在同一列中選擇多個值?

我運行此查詢:

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`; 

我查詢不返回行,但我搜索每個家庭一個接一個,我有價值。

我的查詢出了什麼問題?

此外,我的目的是獲得所有的行,其family值爲Software_1Y,XI_1YPI_1Y

+0

使用'IN'或更改爲'\'family \'='Software_1Y'或\'family \'='XI_1Y'或\'family \'='PI_1Y'' – hjpotter92

+0

糾正我,如果我錯了,但如果我使用'或',那麼我只得到單行右?我的目的是讓所有那些具有這些「家庭」值的行。 – 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個值。

這就是爲什麼你會使用IN。

另一種看待它的方法是使用OR,但是這會很長時間。

+2

這意味着你的SQL有錯誤。你不檢查來自'mysql_query'的錯誤嗎?錯誤消息應該告訴你你的錯誤在哪裏。 – Barmar

+0

謝謝@Barmar,看到我的錯誤,一個愚蠢的。對不起:D哈哈... – 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列時,它必須是由於AND而不是OR。

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

@jude:看來你是直接通過查詢其類型爲字符串直接作爲參數傳遞給mysql_fetch_array,這是不對的。取而代之的是按照上面的方法...

+1

您可能想在ORs周圍加上一些括號...... AND('family' ='Software_1Y'或'family ='XI_1Y'或'family' ='PI_1Y') –

+0

@astander:是啊...它也出現在我的腦海裏。但後來我認爲它會真的影響這個特殊情況下的狀況嗎? –

+0

YE,它肯定會,因爲你有它的經營者的順序是('$ startDT'和'$ endDT'和'家庭'='Software_1Y')或'家庭'='XI_1Y'或'家庭'= 'PI_1Y' –