У меня в базе данных есть 2 таблицы:
"images" с колонками id | title | image_url | url
"text messages" с колонками id | text message
Скрипт должен брать из обоих таблиц информацию об объектах и отсылать их пользователю в чат, в заданном админом, порядке
Например, Фото - Текст - Текст - Фото
Вопрос: Как лучше реализовать получение данных? С помощью третей таблицы (где будет хранится порядок этих структур) или что-то другое?
Думаю, наилучшим решением будет создание связующей таблицы:
CREATE TABLE links ( id BIGINT NOT NULL PRIMARY KEY,
keyword VARCHAR(??) NOT NULL,
id_image INT,
FOREIGN KEY fk_image (id_image)
REFERENCES images (id)
ON DELETE SET NULL
ON UPDATE CASCADE,
id_message INT,
FOREIGN KEY fk_message (id_message)
REFERENCES messages (id)
ON DELETE SET NULL
ON UPDATE CASCADE,
`order` INT NOT NULL,
UNIQUE (keyword, order),
CHECK (((id_image IS NULL) + (id_message IS NULL)) = 1)
);
В запрос передаётся строковый параметр @keyword, полученный обработкой ввода пользователя, а в ответку улетает:
SELECT images.*,
messages.*,
links.*
FROM links
LEFT JOIN images ON links.id_image = images.id
LEFT JOIN messages ON messages.id_message = messages.id
WHERE links.keyword = @keyword
ORDER BY links.order
В каждой возвращаемой записи будет информация либо о картинке, либо о текстовом сообщении.
Само собой звёзды в списке вывода запроса поменять на список реально нужных полей.
PS. Структура разрешает один объект (картинку из images
или текст из messages
) использовать для нескольких ключевых слов, но для каждого ключевого слова этот объект будет иметь свою запись в links
, со своим порядковым номером.
PPS. Структура не требует последовательных значений в поле order
. Достаточно, чтобы меньше-больше соответствовал требуемому раньше-позже.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как с помощью PHP выбрать два последних input? при учете что цифры это id из таблицы БД
Никак не могу найти способ, чтобы сделать вывод содержимого каталога с сортировкой по датеОт нового файла или папке к самой старой
Подскажите как написать запрос, для вывода трех наиболее оплачиваемых сотрудника предприятияНазвания полей и таблиц произвольное, мне нужно...