Sql-запрос для извлечения значения из таблицы при группировании с использованием PHP и Mysql

#php #mysql

#php #mysql

Вопрос:

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

db_basic:

 id     name_id     name       date1              date2

1        60        aaa        2016-10-22       2016-10-26

2        60        aaa                                       

3        62        ccc                                   
  

Здесь в некоторых строках date1 and date2 столбец пуст.У меня есть входные данные, подобные этому $date=2016-10-22 .Мне нужно извлечь name_id and name значение, используя условие $date=2016-10-22 , которое находится посередине date1 and date2 . Здесь мое условие также, если в какой-либо name_id строке есть date1 and date2 столбец, имеет некоторое значение, которое будет извлечено при сравнении даты ввода ( $date=2016-10-22 ) . Если какая-либо строка не имеет значения для date1 and date2 столбца, они должны извлекаться без сравнения с любым вводом. Я объясняю свой запрос ниже.

 $sql="select * from db_basic where date1 <='".$date."' and date2 >= '".$date."' and date1 !='' and date2 !='' group by name_id";
  

Но с помощью этого запроса я не могу получить значение последней строки из таблицы.Мое условие таково: если date1 and date2 имеет значение, оно будет сравниваться, в противном случае оно будет извлекать данные из базы данных без сравнения. Пожалуйста, помогите мне.

Комментарии:

1. попробуйте это $ sql=»выбрать * из db_basic, где date1 <='».$date.»‘ и date2 >= ‘».$date.»‘ и date1 !=» и date2!=» объединить в группу по name_id объединение всех выберите * из db_basic, где date1 =» и date2 =» сгруппировать по name_id «;

2. Можете ли вы опубликовать это в разделе ответов?

3. сначала попробуйте это, если это сработает так, как вы ожидали, тогда я опубликую это в качестве ответа

4. @JYoThI: Это работает. Спасибо.

5. я опубликовал в качестве ответа. если он работает, отметьте его зеленой галочкой, это полезно для будущей ссылки пользователя @subhra

Ответ №1:

 $sql="SELECT * FROM `db_basic` WHERE `date1` <='$date' AND `date2` >= '$date' AND `date1` IS NOT NULL AND `date2` IS NOT NULL GROUP by `name_id`;";
  

Ответ №2:

Просто используйте UNION ALL

 $sql="select * from db_basic where date1 <='".$date."' and date2 >= '".$date."' and date1 !='' and date2 !='' group by name_id union all select * from db_basic where date1 ='' and date2 ='' group by name_id ";
  

Комментарии:

1. Хорошо, это работает, но если я добавляю порядок, он не работает.