У меня есть веб-сайт, где пользователи могут просматривать, скажем, «фрукты» и «овощи».
У меня есть fruit_review и таблица vegetable_review. Оба имеют поля reviewId, fruitName / vegetableName, reviewText и date.
Я хотел бы сделать раздел «последние 5 отзывов» на моей странице индекса, например.
Для этого я использую следующий запрос:
SELECT reviewId AS id, fruitName AS name, reviewText AS text, date FROM fruit_review
UNION
SELECT reviewId AS id, vegetableName AS name, reviewText AS text, date FROM vegetable_review
ORDER BY date DESC LIMIT 5;
Это хорошо работает, но я хотел бы использовать эти результаты в качестве ссылки на обзор.
Как я могу решить, относятся ли только что полученные отзывы к фруктам или овощам?(href = «vegetablereview.php? id = $ id» или href = «fruitreview.php? id = $ id» для каждого случая?)
Могу ли я включить что-то в запрос, который возвращает, например, имя таблицы, что я могу обработать в php?
Я не хотел бы добавлять какие-либо дополнительные столбцы в таблицы (например, столбец типа, который всегда равен 0 для фруктов и 1 для овощей).
Вы могли бы также использовать union all
, Это более эффективно:
SELECT 'fruit' as which, reviewId AS id, fruitName AS name, reviewText AS text, date FROM fruit_review
UNION ALL
SELECT 'vegetable' as which, reviewId AS id, vegetableName AS name, reviewText AS text, date FROM vegetable_review
ORDER BY date DESC
LIMIT 5;
Другими словами, вы должны обращаться с этим явно. MySQL не имеет возможности идентифицировать таблицу для определенного столбца, если вы не укажете ее явно.
Вы можете добавить пользовательское поле (тип) и заполнить его текстом «Фрукты или овощи» для каждой строки.
SELECT reviewId AS id, fruitName AS name, 'fruit' as type, reviewText AS text, date FROM fruit_review
UNION
SELECT reviewId AS id, vegetableName AS name, 'vegetable' as type, reviewText AS text, date FROM vegetable_review
ORDER BY date DESC LIMIT 5;