Задать вопрос
@kamtm

Как построить запрос на выборку с нулем?

Здравствуйте!

В базе данных есть поле status (int)

По-умолчанию оно имеет значение 1, но можно задать значение 0, 2, 3 и другие.

Следующий код делает выборку из базы данных:

if ($page == 'news') {

		$s = '';
		$status  = $inCore->request('status', 'int'); 
		
		if (isset($status) && !empty($status)) { // Проблемный участок
			if ($status == 0) { $s = ' AND status = 0 '; } else { $s = ' AND status = '.$status; } 
			if ($status == 6) { $s = ' OR adddate < (NOW() - INTERVAL 30 DAY) '; }	
		}
		
		$res = $inDB->query("SELECT id FROM news WHERE id>0 $s");  $summ = $inDB->num_rows($res);


Проблема в том, что подразумевается, что при заходе на страницу

?page=news запрос будет обходить переменную $status, то есть будет иметь вид:

SELECT id FROM news WHERE id>0

Так оно и выходит, но проблема в том, что и страница, вида ?page=news&status=0

Также приводит к запросу

SELECT id FROM news WHERE id>0

То есть не получается прикрепить переменную status=0

Причем, страница вида ?page=news&status=3 отлично отрабатывается

SELECT id FROM news WHERE id>0 AND status = 3

НО, если заменить код, на такой:

if ($page == 'news') {

		$s = '';
		$status  = $inCore->request('status', 'int'); 
		
// Проблемный участок
			if ($status == 0) { $s = ' AND status = 0 '; } else { $s = ' AND status = '.$status; } 
			if ($status == 6) { $s = ' OR adddate < (NOW() - INTERVAL 30 DAY) '; }	
		
		$res = $inDB->query("SELECT id FROM news WHERE id>0 $s");  $summ = $inDB->num_rows($res);


То, начинает работать страница вида, ?page=news&status=0

Но, теперь, если зайти на ?page=news, мы видим пустую страницу и запрос вида:

SELECT id FROM news WHERE id>0 AND status = 0

Как можно решить данную проблему? Явно не получается у меня создать условие, вида

ЕСЛи ?page=news , то $s = ' ', иначе, если существует переменная $status , то $s = ' AND status = ' . $status ;
  • Вопрос задан
  • 2307 просмотров
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Проблема в двух строчках:
$status = $inCore->request('status', 'int');
если я правильно понимаю, вы тут получаете данные из запроса и приводите их к нужному типу (int). В этом случае null приведется к 0. Если есть вариант выставить значение по умолчанию (-1) или еще лучше проверить наличие такого ключа.... то-то типа $inCore->request->has('status'); Решить проблему в этой строке будет вернее всего. Пусть оно уж null и возвращает коль уж нету данных и пусть не выдумывает с кастами типов.

if (isset($status) && !empty($status)) { // Проблемный участок

тут нужно убрать !empty и заменить его на что-то типа $status !== null/is_null($status) ибо empty на ноль тоже среагирует как на пустоту.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽