SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 03.07.2016 06:31:08

nina_
Участник
Зарегистрирован: 03.07.2016
Сообщений: 1

Использование GROUP BY приводит к Warning:...

Добрый день

Помогите, пожалуйста, разобраться как правильно написать запрос, чтобы он работал в php коде.
Сейчас код выглядит так:
<?php
include('connect.php');
if (isset($_POST['submit_find']))
{
    $submit_find = isset($_POST['submit_find'])? $_POST['submit_find']:'';
    $metro = isset($_POST['metro'])? $_POST['metro']:'';
    $type_home = isset($_POST['type_home'])? $_POST['type_home']:'';
    $start_date = isset($_POST['start_date'])? $_POST['start_date']:'';
    $end_date = isset($_POST['end_date'])? $_POST['end_date']:'';
    $sql = "SELECT A.id_person,`name`, `surname`, `metro`, `type_home`,`date`,`type_day` FROM `profil_sitters` AS A LEFT JOIN `calendar_sitters` AS B ON ( A.id_person = B.id_person ) WHERE 1";
  if (!empty($metro)){
        $sql .= " AND `metro` = '$metro'

GROUP BY
A.id_person";
    }
    if (!empty($type_home)){
        $sql .= " AND `type_home` = '$type_home'
GROUP BY
A.id_person";
    }
    if (!empty($start_date) && !empty($end_date)){
        $sql .= "  AND A.id_person NOT IN (SELECT B.id_person FROM `calendar_sitters` AS B WHERE `date` BETWEEN  '$start_date' AND '$end_date')
GROUP BY
`id_person`";
    }
        $date = mysql_query($sql);
        $count = mysql_num_rows($date);
        for($i=0; $i<$count;$i++){
            $date_info = mysql_fetch_assoc($date);
            $info.='Name:'.$date_info['name'].'<br>';
            $info.='Surname:'.$date_info['surname'].'<br>';
            $info.='Metro:'.$date_info['metro'].'<br>';
            $info.='Type_home:'.$date_info['type_home'].'<br>';
            $info.='Start_date:'.$start_date.'<br>';
            $info.='End_date:'.$end_date.'<br>';
            $info.='Id_person:'.$date_info['id_person'].'<br><br><br>';
        }

echo $info;
}

Этот код делает выборку по форме (см.картинку) и все бы хорошо, но все работает только если:
выбрана только ст.метро или только тип жилья или только период соответственно.
Если убрать GROUP BY, то записи будут дублироваться.
Как правильно составить запрос (или может использовать его в коде),
чтобы при попытке задать сразу все условия получать результат выборки, а не
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in Z:\home\filters\www\scripts\form_find.php?

Неактивен

 

#2 03.07.2016 08:22:06

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Использование GROUP BY приводит к Warning:...

если выбрать несколько условий, то часть GROUP BY A.id_person дублируется и запрос становится синтаксически неверным
нужно сначала добавить все условия. а потом один раз добавить группировку
и про FAQ #2 не забывайте

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson