编写SQL查询以过滤和返回来自众多表(多对多,一对多)的数据

时间:2012-06-25 04:45:05

标签: php mysql sql

我正在构建在新网站上过滤结果的功能。每个结果包含来自三个单独表格的数据(如下所示为A,B和C)。映射表(D到K)包含我的大多数过滤器所基于的数据。

我希望返回包含A.id,A.name,B.rating,C.price列的行,其中DK包含B上的某些数据。我所拥有的过滤器内容是来自映射的一系列ID表。在返回一个A,B,C关系之前,我可以拥有尽可能少的过滤器,或者多达20个ID。此外,每页显示的结果限制为12个。

想到上面的炸薯条我的大脑。我已经在下面最好地绘制了表格的结构。我们将非常感谢您提供的任何帮助。谢谢!

Database design

架构信息 编辑

A: id INT PRIMARY, name VARCHAR(255)

B: id INT PRIMARY, a_id INT, rating FLOAT

C: id INT PRIMARY, b_id INT, price DECIMAL(10, 2)

映射表D-K: b_id INT, ?_id INT

D-K: id INT PRIMARY, name VARCHAR(255)

1 个答案:

答案 0 :(得分:0)

听起来你想做一些JOIN

SELECT A.name, B.rating, C.price
FROM A
JOIN B ON A.id = B.a_id
JOIN C ON B.id = C.b_id

然后,要从其他表中进行过滤,您也可以加入它们:

SELECT A.name, B.rating, C.price
FROM A
JOIN B ON A.id = B.a_id
JOIN C ON B.id = C.b_id
JOIN BDmapping ON B.id = BDmapping.b_id
JOIN BEmapping on B.id = BEmapping.b_id
WHERE BDmapping.d_id = <some value>
AND BEmapping.e_id = <some value>

理想情况下,您只想加入实际需要用于任何给定查询的表格 - 如果您没有对给定字段进行过滤,请不要加入其表格。