另一个mysql JOIN问题

时间:2010-02-05 18:13:47

标签: php sql mysql database

我有这些表格:

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)从一个类别(在此前车中)检索所有选项及其值。

基本上,我需要帮助加入声明......

请不要在代码中使用别名来简化它:)

由于

3 个答案:

答案 0 :(得分:1)

我知道这不能回答你的主要问题,但我想提出一个我相信会让你的生活更轻松的建议......

  1. PK列的列名称 - 只需调用所有列“id”。减少您必须记住的事物的数量。消除了混淆和潜在错误的主要来源。

  2. 使表名一致。我的意思是让它们形成相同的形状。你可以将它们全部作为单数名词或所有复数名词,但只需使它们全部相同即可。查询变得更容易编写和更容易理解。

    classifieds

    categories

    category_options

    option_values

  3. FK cols的列名 - 如下所示:parent_table_id。例如:classified.category_id

  4. 消除任何不包含新信息的措辞。例如,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 = <?>