14

1つの列で複数の値を選択しようとしています。family基本的に、クエリで値を持つSoftware_1Y列の下にあるものをすべて選択する必要がありますXI_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`;

クエリは行を返しませんが、各ファミリを1つずつ検索します。値があります。

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

また、私の目的は、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列のクエリ中に、ORではなくANDが原因である必要があります。

$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 に答える