Как выбрать несколько значений в одном столбце?

Я пытаюсь выбрать несколько значений в одном столбце. В основном, я хочу, чтобы запрос XI_1Y все из них в family столбцов со значениями Software_1Y, XI_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.

Ответ 1

Как насчет использования 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 не может быть сразу тремя значениями, но это может быть 1 из 3 значений.

Вот почему вы должны использовать IN.

Другим способом взглянуть на это было бы использование OR, но это очень сильно изматывается.

Ответ 2

$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' ";

Это должно быть связано с AND вместо OR при запросе колонки FAMILY.

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

@jude: Кажется, вы прямо передаете запрос, который имеет строку типа string непосредственно как параметр mysql_fetch_array, что неверно. Вместо этого следуйте приведенному выше подходу...