我正在开发一个使用程序 PHP 和 phpmyadmin 以及 InnoDB 引擎的项目。
我不是开发人员,也不是专业人士,我只是喜欢享受 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 - 未知“字段列表”中的“结果2”列”
我希望一切都清楚了,提前感谢大家,并祝贺整个互联网上最有用的页面之一:)
最佳答案
您可以在同一个选择中执行多个联接
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
您可以按照您想要的顺序放置字段。
关于php - MYSQL 是这个 JOIN 太冗长还是这是唯一的方法?排序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54523902/