2015-04-30 4 views
0

Я хочу сделать запрос с несколькими входными параметрами, а некоторые из них могут быть пустыми.Выберите все столбцы, соответствующие определенным значениям, которые могут быть пустыми

Этот запрос используется для получения данных из базы данных в зависимости от значений, которые вводит пользователь.

Например, он может выбрать только начало и дату окончания с час, или просто выбрать продукт, и т.д. ...

SELECT 
    cl.checklist_id AS id, 
    cl.checklist_indice AS indice, 
    cl.checklist_produit_id AS produitId, 
    cl.checklist_personne_id AS personneId, 
    cl.checklist_date AS date, 
    cl.checklist_heure AS heure, 
    cl.checklist_machine_id AS machineID 
FROM 
    checklist cl, 
    personne p, 
    produit pr 
WHERE cl.checklist_id IN (SELECT 
      cl.checklist_id 
     FROM 
      checklist cl 
     WHERE 
      :heureStart <= cl.checklist_heure 
       AND cl.checklist_heure <= :heureEnd 
       AND cl.checklist_id IN (SELECT 
        cl.checklist_id 
       FROM 
        checklist cl 
       WHERE 
        :dateStart <= cl.checklist_date 
         AND cl.checklist_date <= :dateEnd 
         AND cl.checklist_id IN (SELECT 
          cl.checklist_id 
         FROM 
          checklist cl 
         WHERE 
          cl.checklist_produit_id = :produitId 
           AND cl.checklist_id IN (SELECT 
            cl.checklist_id 
           FROM 
            checklist cl 
           WHERE 
            cl.checklist_machine_id = :machineId 
             AND cl.checklist_id IN (SELECT 
              cl.checklist_id 
             FROM 
              checklist cl 
             WHERE 
              cl.checklist_personne_id = :personneId))))); 

Если я хочу этот запрос работать, я должен заполнить все значения для получения данных.

Есть ли способ получить все данные из столбца, если значения пустые (например, SELECT * в столбце)? Нужно ли делать запрос для каждой возможности?

ответ

1

Возможно, что-то вроде этого запроса? Вы должны запросить любую возможность, но не во вложенном запросе, как вы сделали ...

SELECT cl.checklist_id AS id, 
    cl.checklist_indice AS indice, 
    cl.checklist_produit_id AS produitId, 
    cl.checklist_personne_id AS personneId, 
    cl.checklist_date AS date, 
    cl.checklist_heure AS heure, 
    cl.checklist_machine_id AS machineID 
FROM checklist cl, personne p, produit pr 
WHERE (:heureStart is null OR :heureStart <= cl.checklist_heure) 
     AND ((:dateStart is null AND :dateEnd is null) OR (:dateStart <= cl.checklist_date AND cl.checklist_date <= :dateEnd)) 
     AND (:produitId is null OR cl.checklist_produit_id = :produitId) 
     AND (:machineId is null OR cl.checklist_machine_id = :machineId) 
     AND (:personneId is null OR cl.checklist_personne_id = personneId); 
+0

Благодарим за быстрый ответ! Но в моей базе данных столбцы никогда не пусты, поэтому я должен заполнить все данные в моей форме, чтобы получить данные, поэтому я сталкиваюсь с такими же проблемами .. Или, может быть, я что-то не понял. – Nmakaveli

+0

Я не проверяю, что столбец базы данных пуст, я проверяю, что ваш ввод в вашей форме пуст. Таким образом, либо ваш ввод из вашей формы для этого поля пуст, либо вы сравниваете его со значениями в вашей базе данных ... – Aster

+0

Я обнаружил, что ошибка вызвана незаконным сочетанием сопоставлений. Спасибо. – Nmakaveli

0

Я нашел запрос, который удачно впишется моей проблемой, вот она:

SELECT cl.checklist_id AS id, 
    cl.checklist_indice AS indice, 
    cl.checklist_produit_id AS produitId, 
    cl.checklist_personne_id AS personneId, 
    cl.checklist_date AS date, 
    cl.checklist_heure AS heure, 
    cl.checklist_machine_id AS machineId 

FROM checklist cl 

WHERE (cl.checklist_date BETWEEN :dateStart AND :dateEnd) 
    AND (cl.checklist_heure BETWEEN :heureStart AND :heureEnd) 
    AND cl.checklist_produit_id REGEXP :produitId 
    AND cl.checklist_machine_id REGEXP :machineId 
    AND cl.checklist_personne_id REGEXP :personneId; 

И это код PHP (для каждой переменной, которую вы должны проверить это):

if(strlen($variable) == 0){ 
      $variable= "^.*$"; 
} 

REGEXP матч всех символов, от размера последовательности от 0 до ∞ (бесконечной).

Смежные вопросы