Могут ли результаты запроса из трех разных таблиц перейти в один массив?

#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_value

TROPHY_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>