从两个表中过滤项目。 mysql规范化

时间:2012-04-12 21:58:53

标签: mysql

基本上我想选择所有car_color = yellow& amp; car_gear =手册。 我怎样才能做到这一点?我应该写什么而不是“???” ? 我的桌子结构错了吗?

到目前为止我做了什么:

$sql = "SELECT * FROM
    A
JOIN 
    B
ON
    A.id=B.Aid WHERE ???";

表A

id  title
1   Toyota
2   Volvo

表B

id  Aid     attr_name   attr_val
0   1       car_year    2012
1   1       car_color   red
2   1       car_km      1000
3   1       car_gear    manual
4   2       car_color   black
5   2       car_km      0
6   2       car_gear    Automat

1 个答案:

答案 0 :(得分:0)

我的建议是,如果您希望where子句正常工作,则需要重新设计表。类似的东西:

create table tableB
(
    id int,
    Aid int,
    car_year int,
    car_color varchar,
    car_km int,
    car_gear varchar
)

然后你可以写下SQL

SELECT * 
FROM A
JOIN B
    ON A.id=B.Aid 
WHERE car_color='yellow'
    AND car_gear='Manual'

或者您可以更进一步,为每个汽车变量创建一个单独的表 - 年份,颜色,公里,齿轮。这实际上取决于你的需求,你不想过度使用它。