0

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

我希望返回包含 A.id、A.name、B.rating、C.price 列的行,其中 DK 包含 B 上的某些数据。我拥有的过滤器内容是映射表中的一系列 ID。在返回一个 A、B、C 关系之前,我可以有最少的过滤器,也可以有多达 20 个我必须检查的 ID。此外,每页只能显示 12 个结果。

光是想着上面的就炸我的脑袋。我已经在下面尽可能地画出了表格的结构。您能提供的任何帮助将不胜感激。谢谢!

数据库设计 .

架构信息 编辑

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)

4

1 回答 1

0

听起来你想做一些JOINs。

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>

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

于 2012-06-25T05:19:25.267 回答