#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. Хорошо, это работает, но если я добавляю порядок, он не работает.