Переименование ключа на многостольном MySQL SELECT

Я пытаюсь получить содержимое 3 разных таблиц.

таблица A = содержит наш список пользователей, таблица B = возвращает договоры, связанные с пользователями,таблица C = возвращает подробности формулы, связанные с контрактами.

Чтобы сделать это правильно, я использую следующий многостоловый запрос:

SELECT * FROM rscm_students A, rscm_files B, rscm_formulas C
    WHERE B.dossier_status = 0
    AND A.student_agency = :agency
    AND B.file_student_id = A.id
    AND B.file_formula_id = C.id
    AND C.formula_place = 0
    GROUP BY A.student_uniqid
    ORDER BY B.file_date_create";

Вот где все чертовски сложно. Он возвращает правильные данные, но в качестве первичного ключа каждой таблицы здесь называется "id". Я не могу сделать некоторые foreach в php. Если я получил 3 контракта на 1 пользователя, я не могу перегруппировать каждый контракт в одном и том же пользовательском массиве.

Я все еще не эксперт в SQL, поэтому я использую Phinx для управления своей базой данных. По этой же причине мои первичные ключи называются "id".

Если у вас есть хорошая идея, пожалуйста, дайте мне знать!

1 ответ

Решение

Хорошо, я сделаю ответ из этого.

Во-первых, не используйте

select *

Вышеупомянутый выбор хорош для быстрой и грязной разработки перед производством. Но это делает беспорядок из таких вещей, как ваши объединения с общими именами столбцов из нескольких таблиц (например, id и другие).

Используйте современный явный синтаксис соединения. Не используйте старый стиль соединения. Так что используйте join а также on,

Наконец, с псевдонимами таблиц, создайте уникальные имена выходных столбцов для id столбцы или другие столкновения, такие как

A.id as aid, B.id as bid
Другие вопросы по тегам