我刚刚意识到由于在连接表中重复列名,我将不得不开始别名我的数据库调用。有没有办法自动告诉SQL别名我的所有列名,以便返回前缀为表名?否则,当只有其中一些是别名时,它似乎很混乱。只是努力保持一致,而不需要编写大量的额外代码。
$sql = "SELECT contracts.po_number, contracts.start_date, contracts.end_date, contracts.description, contracts.taa_required, contracts.account_overdue, jobs.id AS jobs_id, jobs.job_number, companies.id AS companies_id, companies.name AS companies_name
FROM contracts
LEFT JOIN jobs ON contracts.job_id = jobs.id
LEFT JOIN companies ON contracts.company_id = companies.id
WHERE contracts.id = '$id'
ORDER BY contracts.end_date";
答案 0 :(得分:4)
不,但是你可以通过使用表别名来使生活更轻松:
SELECT c.po_number, c.start_date, c.end_date, c.description,
c.taa_required, c.account_overdue, j.id AS jobs_id, j.job_number,
cm.id AS companies_id, cm.name AS companies_name
FROM contracts c
LEFT JOIN jobs j ON c.job_id = j.id
LEFT JOIN companies cm ON c.company_id = cm.id
WHERE c.id = '$id'
ORDER BY c.end_date
答案 1 :(得分:0)
你可以在你的sql语句中使用别名表,所以你必须少写,但实际上从php访问列,如果你想通过名称访问它们,就无法对所有列进行别名处理。
你也可以使用php的索引访问列,但这是一个维护噩梦
答案 2 :(得分:0)
我建议始终使用别名表名。如果你跳过别名,它很难在以后阅读。
答案 3 :(得分:0)
有关信息,这是MySQL 5.6中的问题(可能是其他人!)
SELECT * FROM table1 LEFT JOIN table2 ON PKI = FKI
按预期工作..但最近我在一个查询中误将'LEFT'作为'LEFY'而且它也有效但是标准连接!所以
SELECT * FROM table1 LEFY JOIN table2 ON PKI = FKI
也可以像LEFY一样替代,所以要小心改变你的查询!