MySQL: возвращать значения, даже если WHERE равно нулю - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть такая таблица:

| article_id | parent_article_id | title         |
|------------|-------------------|---------------|
|         90 |              NULL | First article |
|         91 |                90 | part 2        |
|         92 |                90 | part 3        |
|         93 |                90 | part 4        |
|         94 |              NULL | 2f3           |
|         95 |              NULL | reer          |

В скрипте PHP у меня есть выпадающий список select, и я хочу заполнить элемент управления select статьями, в которых parent_article_id имеет значение null (я хочу всех родителей), за исключением обработки article_id im.

Итак, если я обрабатываю article_id 90, я хочу вернуть всех доступных родителей, то есть article_id: 94, 95 (без учета обработки article_id im: 90) ...

Если я обрабатываю article_id 91, я хочу вернуть: 90, 94, 95 ...

Если я обрабатываю article_id 95, я хочу вернуть: 90, 94 ...

Мне удалось создать запрос, который работает нормально:

SELECT
    a.article_id,
    a.parent_article_id,
    a.title
FROM
    article a
WHERE
    a.article_id != ? AND a.parent_article_id IS NULL
ORDER BY
    a.article_id

....

$stmt = $conn->prepare($q);
$stmt->bind_param('i', $articleid);
$stmt->execute();

Проблема в том, что я создаю новую статью, и поэтому обрабатываемый article_id, который я обрабатываю, равен нулю (еще не существует) ... Запрос ничего не возвращает, что логично. Я хочу вернуть все parent_article_id, которые являются нулевыми, даже если article_id еще не существует?

Возможно ли это с помощью одного запроса?

1 Ответ

1 голос
/ 22 апреля 2020

Используйте нулевой безопасный оператор равенства <=>:

SELECT
    a.article_id,
    a.parent_article_id,
    a.title
FROM
    article a
WHERE
    NOT a.article_id <=> ? AND a.parent_article_id IS NULL
ORDER BY
    a.article_id

и установите $articleid в null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...