我有这些表格:
classified:
classified_id (PK)
price
headline
cat_id // THIS IS ANYTHING FROM 1 TO 30 DEPENDING ON CATEGORY. IT IS SO THAT I CAN LINK WHICH CATEGORY TO USE IN THE CATEGORY TABLE BELOW
text
etc...
category:
cat_id (PK)
cat_name
category_options:
option_id (PK)
cat_id (FK) // FOREIGN KEY FROM CATEGORY TABLE...
option_name
option_values:
value_id (PK)
option_id (FK)
classified_id (FK)
value
我应该如何在这里使用加入,有人可以给我一个简单的例子吗?
以下是我的设置示例:
category
cat_id cat_name
1 cars
category_options
option_id cat_id option_name
1 1 color
2 1 gearbox
option_values
value_id option_id classified_id value
1 1 22 red
2 2 22 manual
classified
classified_id price headline cat_id
22 5000 'test' 1 //for cars
我希望能够通过“了解”classified_id(在这种情况下为22)从一个类别(在此前车中)检索所有选项及其值。
基本上,我需要帮助加入声明......
请不要在代码中使用别名来简化它:)
由于
答案 0 :(得分:1)
我知道这不能回答你的主要问题,但我想提出一个我相信会让你的生活更轻松的建议......
PK列的列名称 - 只需调用所有列“id
”。减少您必须记住的事物的数量。消除了混淆和潜在错误的主要来源。
使表名一致。我的意思是让它们形成相同的形状。你可以将它们全部作为单数名词或所有复数名词,但只需使它们全部相同即可。查询变得更容易编写和更容易理解。
classifieds
categories
category_options
option_values
FK cols的列名 - 如下所示:parent_table_id
。例如:classified.category_id
。
消除任何不包含新信息的措辞。例如,category.name
代替category.cat_name
。
答案 1 :(得分:0)
像
这样的东西 SELECT category_option.option_name, option_values.value
FROM classified, category_option, option_values
WHERE classified.classified_id=?id AND classified.cat_id=category_options.cat_id AND option_values.option_id=category_options.option_id
如果您传入22作为?id参数,则会得到2行:
红色
变速箱手册
答案 2 :(得分:0)
你实际上甚至不需要在这里明确指定连接。您想要从两个表(选项及其值)中获取值,其中option_ids是相同的,并且仅选择您的cat&分类id匹配。
SELECT cat_id, classified_id, option_id, option_name, value
FROM option_values, category_options
WHERE category_options.option_id = option_values.option_id
AND classified_id = <?> AND cat_id = <?>