微调我的MySQL关系数据库以及如何使用JOIN?

时间:2010-02-05 13:46:29

标签: php sql mysql database

我是mysql和数据库的新手,所以我在这里需要帮助......

当唯一给定的变量是ad_id时,我应该如何使用JOIN从下表中获取记录?

类别和类别选项是手动填写的,即用户不得更改它们。所以他们只是参考表,但我不确定这是我应该怎么做的... 我有6张桌子:

category:
cat_id (PK)
cat_name

category_options:
option_id (PK)
cat_id (FK)
option_name

option_value:
value_id (PK) (AI) // I think this should have Auto Increment
option_id (FK)
classified_id (FK)
value

classified: (THIS IS THE MAIN TABLE YOU COULD SAY)
classified_id (PK) (AI)
ad_id
cat_id
headline
description

area: // I am thinking about moving these fields over to the posters table, right?
area_id (PK)
classified_id (FK)
area
description

以下是我如何在表格中插入分类:

mysql_query("INSERT INTO classified (ad_id, cat_id, headline, description) VALUES ('$ad_id', $cat_id, '$headline', '$description')");
$last_classified_id=mysql_insert_id();

mysql_query("INSERT INTO poster (classified_id, name, email, tel) VALUES ($last_classified_id, '$name', '$email', '$tel')");

mysql_query("INSERT INTO area (classified_id, area, community) VALUES ($last_classified_id, '$area', '$community')");

我是JOIN的新手!

每个类别都有子选项(CARS - >颜色),每个选项都有一个值。 我想,只有拥有ad_id,才能选择所有这些信息。

我该怎么办?

我应该合并区域和海报表吗? 另外,请仔细看看我的数据库,并告诉我是否有任何我可能错过的内容......

这真的是出于我的知识基础,所以我们非常感谢您的详细解释!

由于

2 个答案:

答案 0 :(得分:0)

看起来你有两个字段可能是分类中的主键:classified_id和ad_id。然后你有另外两个表,海报和区域,与分类有一对一的关联。如果是这种情况,您可以将所有字段都归类为分类。

在insert语句中加入表的查询如下:

select
    classified.ad_id,
    classified.classified_id,
    classified.headline,
    classified.description AS classified_description,
    poster.name,
    poster.email,
    poster.tel,
    area.area,
    area.description AS area_description from
    classified inner join
    poster
    on
        classified.ad_id = poster.classified_id inner join
    area
    on
        classified.classified_id where
    classified.ad_id = 123

答案 1 :(得分:0)

这是一个连接某些表以从多个表中获取数据的示例:

SELECT c.cat_name, co.option_name, cl.headline
FROM category c 
INNER JOIN category_options co ON co.cat_id = c.cat_id
INNER JOIN classified cl ON cl.cat_id = c.cat_id
WHERE cl.ad_id = {Your ad_id}

您可以以相同的方式加入所需的任何其他表格(海报,区域)。

编辑(对评论的回应):'c','cl'和'co'是'category','classified'和'category_option'表的别名。它们与连接没有任何关系。 Here是一个来源。当我说FROM category c时,允许我使用'c'作为类别表的快捷方式。使用别名允许你如何做select / join / where子句,而不是像这样:

SELECT category.cat_name, category_options.option_name, classified.headline
FROM category
INNER JOIN category_options ON category_options.cat_id = category.cat_id
INNER JOIN classified ON classified.cat_id = category.cat_id
WHERE classified.ad_id = {Your ad_id}

基本上它是一种可以节省一些打字的快捷方式。