gpt4 book ai didi

php - 如何在一个 SELECT [MySQL] 中从 3 个表中获取数据

转载 作者:行者123 更新时间:2023-11-30 22:46:17 26 4
gpt4 key购买 nike

我有 3 个不同的表,基于第一个表中的搜索,我能够从第二个表中获取数据,并且基于第一个和第二个表中的搜索,我能够从第三个表中获取数据。

表格看起来像这样:

table cases
+-------+----------+------------+---------+
|case_id| car_model| vin | country |
+-------+----------+------------+---------+
| 1 | VW | ABCDEFG | EN |
+-------+----------+------------+---------+
| 2 | VW | GFEDCBA | PL |
+-------+----------+------------+---------+
table calculations
+-------+---------------+------------+---------+
|case_id|calculation_id | price | country |
+-------+---------------+------------+---------+
| 1 |45545662512 | 11000 | EN |
+-------+---------------+------------+---------+
| 1 |45545662512 | 7000 | PL |
+-------+---------------+------------+---------+
| 2 |1234561234 | 3000 | EN |
+-------+---------------+------------+---------+
| 2 |3214561234 | 6000 | EN |
+-------+---------------+------------+---------+
table positions
+-------+------------+------------+--------------+
|case_id|repairmethod| text |calculation_id|
+-------+------------+------------+--------------+
| 1 | L | hallo | 7894561234 |
+-------+------------+------------+--------------+
| 1 | L | hi1 | 45545662512 |
+-------+------------+------------+--------------+
| 2 | L | hi2 | 45545662512 |
+-------+------------+------------+--------------+
| 2 | E | hi3 | 45545662512 |
+-------+------------+------------+--------------+
| 2 | G | hi4 | 45545662512 |
+-------+------------+------------+--------------+
| 2 | L | hi5 | 3214561234 |
+-------+------------+------------+--------------+
| 2 | L | hi6 | 3214561234 |
+-------+------------+------------+--------------+

我是怎么写的:

  • 从表 1 中获取数据和 case_id:

    "SELECT * FROM cases WHERE vin = :vin ORDER BY date_created DESC LIMIT 60";

  • 根据我从表 2 中的第一个表搜索得到的 case_id,取最后一行:

    “SELECT * FROM calculations WHERE case_id = :case AND country = :country ORDER BY calculation_id DESC LIMIT 1”;

  • 根据表 1 的 case_id 和表 2 的 calculation_id 在表 3 中搜索:

    “从 calculation_id = :calculationid AND case_id = :case_id AND repairmethod LIKE 'L%' LIMIT 60 的位置选择文本”;

例如,用户搜索 ABCDEFG 时的预期结果:

来自表格案例:

car_model = VW
country = EN
case_id = 1

从表计算:

calculation_id = 45545662512    
price = 11 000

从表位置:

text = hi1
text = hi2

但是这个查询是基于 PHP 的,将值存储在变量中等等,有没有机会把我以前的所有语句都写在一个 SELECT 中?

我已经尝试过 INNER JOIN

"SELECT * FROM cases v INNER JOIN calculations c
ON v.case_id = c.case_id
INNER JOIN positions p
ON v.case_id = p.case_id
WHERE v.vin = :vin
ORDER BY c.name DESC
LIMIT 4";

但是有多个问题,有限制,有多个 WHERE 的选择,等等。我错过了什么吗?

感谢您的帮助。

最佳答案

试试这个:

SELECT cases.case_id, cases.car_model, cases.country, 
calculations.calculation_id, calculations.price,
positions.text
FROM cases INNER JOIN
calculations ON(cases.case_id = calculations.case_id AND cases.country = calculations.country) INNER JOIN
positions ON(calculations.case_id = positions .case_id AND calculations.calculation_id = positions.calculation_id)
WHERE vin = :vin

注意:如果您搜索“ABCDEFG”,这将为您提供 2 行数据,每行对应位置表中的每条记录。

关于php - 如何在一个 SELECT [MySQL] 中从 3 个表中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29518819/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com