#php #mysql #arrays
#php #mysql #массивы
Вопрос:
Я пытаюсь извлечь все записи в каждой из этих таблиц, которые имеют значение в Games.date_added, превышающее введенную дату. Пытаюсь извлечь все новые записи.
Могу ли я сделать все это в одном запросе? Или проще просто добавить поле date_added в каждую таблицу и запрашивать каждую таблицу отдельно?
Игры
идентификатор
date_added
имя_игры
release_date
game_category
game_type
game_consoleТРОФЕИ
trophies_id
имя_игры
имя_игры имя_игры имя_игры tr_description имя_игры
tr_color
имя_игры_ach_valueTROPHY_TOTALS
trophy_totals_id
имя_игры
bronze_ttl
silver_ttl
gold_ttl
plat_ttl
hidden_ttl
Ответ №1:
Будет намного лучше и понятнее, если вы выполните 3 отдельных запроса. Каждая из них даст вам разное количество строк. Запрос, заданный glglgl, который использует 2 объединения, приведет к умножению строк из таблицы игр. Это связано с тем, что тропы и итоги тропы могут содержать несколько записей с одной и той же игрой. Конечно, если game_name является уникальным столбцом, соединение будет в порядке.
Комментарии:
1. В трофеях есть несколько записей с одинаковым названием игры.
2. В этом случае оставайтесь с отдельными запросами. Нет смысла объединять данные. Но подсказка, данная идентификатором glglgl abiut, также является хорошей идеей. Измените способ подключения данных. Название игры — это строка, она может отличаться из-за одного пробела, и соединение будет потеряно.
Ответ №2:
Прежде всего, было бы, конечно, лучше иметь поля внешнего ключа в TROPHIES
и TROPHY_TOTALS
быть id
соответственно. game_id
вместо game_name
.
При этом я сосредоточусь на вашей текущей структуре таблицы.
SELECT <wanted fields>
FROM GAMES
LEFT JOIN TROPHIES USING (game_name)
LEFT JOIN TROPHY_TOTALS USING (game_name)
WHERE date_added > <given>