#php #mysql #sql
#php #mysql #sql
Вопрос:
Я хочу проверить, существует ли значение внешнего ключа в другой таблице. Вот что я пытаюсь сделать: у меня есть таблица с именем Gallery и еще одна с именем Posts. Posts — это родительская таблица, поэтому Gallery содержит внешний ключ post_id. На posts.php страница, поскольку не у каждого сообщения есть галерея, я хотел показать сообщение для каждой строки, например, «имеет галерею» или «не имеет галереи». Например: идентификатор записи 5 имеет галерею, как и номер записи 10, но идентификатор записи 1 не имеет галереи, как и идентификатор записи 3. Я думаю о таком способе, как: Таблица галереи, if a gallery_id row has a 'null' value on column post_id, then echo "does not have a gallery." Else echo "has a gallery"
, на posts.php . Есть ли способ проверить, существует ли определенное значение в другой таблице?
SQL -код:
CREATE TABLE `gallery` (
`gallery_id` int(11) NOT NULL AUTO_INCREMENT,
`picture` varchar(200) NOT NULL,
`post_id` int(11) NOT NULL,
`gallery_date` datetime NOT NULL,
PRIMARY KEY (`gallery_id`),
KEY `post_id` (`post_id`),
CONSTRAINT `gallery_ibfk_1` FOREIGN KEY (`post_id`) REFERENCES `posts` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=48 DEFAULT CHARSET=utf8mb4
Я просто пытался
<?php
$checkGallery = new Read();
$checkGallery->performQuery('gallery', "WHERE post_id = :post_id", "id_post={$post_id}");
if($checkGallery->result()):
$affirmative = $checkGallery->result();
?>
а потом
<td class="values">
<?= ( $affirmative ? 'This post has a gallery!' : 'No gallery enrolled in this post' );?>
</td>
Не получил удовлетворительных результатов. В нем были опущены некоторые строки вместо того, чтобы повторять «Ни одна галерея не зарегистрирована в этом сообщении».
Комментарии:
1. Вы имеете в виду, кроме прямого запроса к
gallery
таблице?2. И есть ли проблемы? Кроме того, при добавлении новой информации с большим количеством кода лучше отредактировать это в вопросе. Комментарии не подходят для длинного кода bits (особенно многострочного).
3. Что входит в этот дополнительный код в комментарии
id_post
? Я не уверен, что делает вашаperformQuery()
функция, но разве это не должно читатьсяpost_id={$post_id}
так, как у вас есть?4. «В нем пропущены определенные строки» — этого недостаточно, чтобы продолжать. Предоставьте образец данных в тех случаях, когда он терпит неудачу.
5. performQuery() выполняет «SELECT * ИЗ таблицы, ГДЕ post_id = :post_id», а id_post на самом деле является post_id. Моя ошибка, я случайно неправильно написал это слово.
Ответ №1:
Бум! Я понял.
Я только что выполнил запрос «ВЫБРАТЬ * ИЗ галереи, ГДЕ id_post =:id_post» (учитывая, что мы вызываем метод bindValue на posts.php )и id_post = $id; (Итак, ВЫБЕРИТЕ * ИЗ галереи, ГДЕ id_post = 5 или … ГДЕ id = 3 и так далее, а результаты хранятся в массиве $checkGallery.)
<?php
if($checkGallery):
?>
<td><?= This post has a gallery! ?></td>
<?php else: ?>
<td><?= No gallery attached to this post.?></td>
<?php endif;?>
И каждая строка возвращает либо «у этого сообщения есть галерея«, либо «К этому сообщению не прикреплена галерея«, и все это динамически. Спасибо