php - MYSQL 这个 JOIN 太冗长还是这是唯一的方法?排序不起作用
问题描述
我正在使用带有 InnoDB 引擎的程序 PHP 和 phpmyadmin 进行项目。我不是开发人员,也不是专业人士,我只是喜欢玩 PHP,所以如果我说错了(或者如果你想建议我使用面向对象的 PHP),请记住这一点:)。
我有这样的东西(只是举例,实际上我有很多链接的表和字段):
request(id, customer_id, field1, contact_id, field2)
customer(id, customer)
contact(id, contact)
我需要在“请求”表中返回行 id=1 并带有引用值(而不是 id 编号)所以我的结果必须是这样的:"Company X", value1, value2, "John".
我可以得到这个:
SELECT * FROM (
(
SELECT customer.customer
FROM customer
JOIN request ON customer.id=request.customer_id
WHERE request.id=1
) as result1
JOIN
(
SELECT request.field1, request.field2
FROM request
WHERE request.id=1
) as result2
JOIN
(
SELECT contact.contact
FROM contact
JOIN request ON contact.id=request.contact_id
WHERE request.id=1
) as result3
)
(我不知道我是否可以省略“resultX”别名,但是使用 phpmyadmin 我需要拥有它们,否则会出错)。
现在我的问题:
1-这可行,但我觉得这不是编写代码的正确方式,我认为它可以以更好/更智能的方式和更少的代码来实现,但我不知道如何。
2- 如何以不同的顺序列出结果?喜欢:field2,customer,contact,field1
?我尝试拆分 field1,field2 SELECT 并在第一行更改顺序,如下所示:
SELECT result2,result1,result4,result3 FROM (
(
SELECT customer.customer
FROM customer
JOIN request ON customer.id=request.customer_id
WHERE request.id=1
) as result1
JOIN
(
SELECT request.field1
FROM request
WHERE request.id=1
) as result2
JOIN
SELECT request.field2
FROM request
WHERE request.id=1
) as result3
JOIN
(
SELECT contact.contact
FROM contact
JOIN request ON contact.id=request.contact_id
WHERE request.id=1
) as result4
)
但它返回:“#1054 - '字段列表'中的未知列'result2'”
我希望一切都清楚,提前感谢大家,并祝贺整个互联网上最有用的页面之一:)
解决方案
您可以在同一个选择中进行多个连接
SELECT customer.customer, request.field1, request.field2, contact.contact
FROM request
JOIN customer ON request.customer_id = customer.id
JOIN contact ON request.contact_id = contact.id
您可以将字段放在您想要的顺序上。
推荐阅读
- python - ValueError:检查输入时出错:预期 conv2d_input 的形状为 (128, 128, 1) 但得到的数组的形状为 (128, 128, 3)
- hash - 您可以对 HMAC 进行哪些攻击以获取密钥?
- javascript - 更新按钮上的值:单击事件vue js
- html - 引导行>列选择问题
- azure-devops - Gitversion 在 devops 构建中使用日期作为主要版本
- python - 在 Python 中列出 WooCommerce 购买
- php - Pipedrive - 更新潜在客户返回 404 未找到
- c - 输入 0 时,如何使我的 while scanf 循环终止?
- r - 在嵌套的小标题中分组汇总(带有排列)
- kubernetes - 如何在 kubernetes 中按顺序在多个节点上运行 cronjob?