Переименование ключа на многостольном 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