14

我正在尝试在单个列中选择多个值。基本上我希望查询选择列下的所有familySoftware_1YXI_1Y并且P1_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_1Y和的所有行PI_1Y

4

2 回答 2

18

改用 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 个值,但它可能是 3 个值中的 1 个。

这就是为什么你会使用 IN。

另一种看待它的方法是使用 OR,但这真的很啰嗦。

于 2012-09-26T04:01:23.147 回答
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,这是错误的。而是按照上述方法...

于 2012-09-26T04:05:02.850 回答