2012-09-26 18 views
8

Estoy tratando de seleccionar múltiples valores en una sola columna. Básicamente quiero la consulta para seleccionar todos aquellos bajo la columna family con los valores Software_1Y, XI_1Y y P1_1Y¿Cómo selecciono varios valores en la misma columna?

Me postulo esta consulta:

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

Mi consulta devuelve ninguna fila, pero se busco cada familia, uno por uno Tengo valores.

¿Qué problema hay en mi consulta?

Además, mi propósito es obtener todas las filas cuyos valores family son , XI_1Y y PI_1Y.

+0

Utilice 'IN' o cambie a' \ 'familia \' = 'Software_1Y' OR \ 'familia \' = 'XI_1Y' O \ 'familia \' = 'PI_1Y'' – hjpotter92

+0

Corrígeme si estoy equivocado, pero si uso 'OR', entonces solo obtengo una sola fila, ¿verdad? Mi propósito es obtener todas esas filas con esos valores de 'familia'. – Jude

Respuesta

10

Cómo sobre el uso EN lugar

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

La razón por la cual no se devuelven los valores, es porque de esta sección

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

family no pueden ser los 3 valores de una vez, pero podría ser 1 de los 3 valores

Es por eso que usaría IN.

Otra forma de verlo sería usar O, pero eso se pone realmente largo aliento.

+2

Eso significa que hubo un error en su SQL. ¿No comprueba si hay un error de 'mysql_query'? El mensaje de error debería indicar dónde estuvo tu error. – Barmar

+0

Gracias @Barmar, vi mi error, una tontería. Lo siento: D jaja ... – Jude

+0

Esta es de lejos la mejor explicación en este tipo de consultas. Gracias, espectador –

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

Debe ser debido a AND en lugar de OR mientras consulta la columna FAMILY.

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

@jude: Parece que está de paso directamente a la consulta que es de tipo cadena directamente como un parámetro a mysql_fetch_array, lo cual es incorrecto. En su lugar, siga el enfoque anterior ...

+1

Probablemente quiera poner algunos paréntesis alrededor de las RUP ... AND ('family' = 'Software_1Y' O' familia = 'XI_1Y' O 'familia' = 'PI_1Y') –

+0

@astander: Sí ... vino a mi mente también. ¿Pero entonces pensé que realmente afectaría la condición en este caso particular? –

+0

YES, definitivamente lo haría, como lo tiene, el orden de los operadores sería ('$ startDT' AND '$ endDT' AND 'family' =' Software_1Y ') O 'family' =' XI_1Y 'O' family' = 'PI_1Y' –

Cuestiones relacionadas