2012-09-26 23 views
8

Próbuję wybrać wiele wartości w jednej kolumnie. Zasadniczo chcę kwerendy, aby wybrać tych wszystkich pod kolumny family z wartościami Software_1Y, XI_1Y i P1_1YJak wybrać wiele wartości w tej samej kolumnie?

Używam tej kwerendy:

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

Moja kwerenda nie zwraca wiersze, ale ja wyszukiwania każdej rodziny, jeden po drugim Mam wartości.

Co jest nie tak z moim zapytaniem?

Ponadto, moim celem jest uzyskanie wszystkich wierszy, których wartości familySoftware_1Y, XI_1Y i PI_1Y.

+0

Użyj 'IN' lub zmień na' \ 'family \' = 'Software_1Y' LUB \ "rodzina \' = 'XI_1Y' LUB \ "rodzina \' = 'PI_1Y'' – hjpotter92

+0

Popraw mnie, jeśli się mylę, ale jeśli użyję 'OR', wtedy otrzymam tylko jeden wiersz w prawo? Moim celem jest uzyskanie wszystkich tych wierszy z tymi wartościami "rodzinnymi". – Jude

Odpowiedz

10

Jak na temat korzystania IN zamiast

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

Powodem są zwracane żadne wartości, właśnie z powodu tej sekcji

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

family nie mogą być wszystkie 3 wartości na raz, ale może to być 1 z 3 wartości.

Dlatego używałbyś IN.

Innym sposobem patrzenia na to byłoby użycie OR, ale to naprawdę długo się kończy.

+2

Oznacza to, że wystąpił błąd w twoim SQL. Nie sprawdzasz błędu z "mysql_query"? Komunikat o błędzie powinien informować o miejscu popełnienia błędu. – Barmar

+0

Dzięki @Barmar, zobaczyłem mój błąd, głupi. Przepraszamy: D haha ​​... – Jude

+0

Jest to zdecydowanie najlepsze wyjaśnienie tego typu zapytań. Dziękujemy –

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

Musi to być spowodowane AND i zamiast OR podczas sprawdzania kolumny FAMILY.

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

@jude: Wydaje się, przechodząc bezpośrednio kwerendy, która jest typu ciąg bezpośrednio jako parametr do mysql_fetch_array, co jest nie tak. Zamiast tego postępuj zgodnie z powyższym podejściem ...

+1

Prawdopodobnie chciałbyś umieścić kilka nawiasów wokół RÓDZY ... I ("family' = 'Software_1Y' OR" family = 'XI_1Y' OR "family' = 'PI_1Y') –

+0

@astander: Tak ... Przyszło mi to do głowy. Ale pomyślałem, czy naprawdę wpłynie to na stan w tym konkretnym przypadku? –

+0

Tak, to na pewno tak, jak to jest w przypadku operatorów ("$ startDT" I "$ endDT" AND "family" = "Software_1Y") LUB "family" = "XI_1Y" OR "family" = "PI_1Y" –

Powiązane problemy