【问题标题】:MySQL linking tables; some final issuesMySQL 链接表;一些最后的问题
【发布时间】:2010-01-20 11:57:37
【问题描述】:

首先,我要感谢所有帮助我了解规范化以及我应该如何构建数据库的人。

现在,我还有一些最后的问题......

表的链接实际上是如何工作的?

假设你有三个表:

CATEGORY TABLE:
cat_id (PK) -> 1
cat_name -> cars

CATEGORY_OPTIONS TABLE:
cat_opt_id (FK) -> 1
cat_id (FK) -> 1
option_name -> year

CATEGORY_OPTIONS_VALUES TABLE:
cat_opt_val_id (PK) -> 1
cat_opt_id (FK) -> 1
value -> 1999

基本上,这些值应如下所示:

CATEGORY
(1, cars)
(2, MC)

CATEGORY_OPTIONS
(1, 1, year)
(2, 1, fuel)
(3, 2, type)

CATEGORY_OPTIONS_VALUES
(1, 1, 2010)
(2, 1, Petrol)
(3, 2, Cross)

这是否正确,因为我已经在上面设置了它?

我该如何搜索这些,逻辑是如何构成的?

我想我需要来自 PHP(SELECT 等)的查询示例

假设你要搜索一辆汽车 -> year=2010,fuel=PETROL 那么查询是怎样的呢? 并且说你想搜索汽车 ->fuel=PETROL,year=anything

最后,我应该对这些字段中的任何一个使用 AutoIncrement 吗?什么时候使用人工智能?

谢谢

PS:欲了解更多信息,请查看此问题: Can this MySQL db be improved or is it good as it is?

【问题讨论】:

    标签: php sql mysql database search


    【解决方案1】:

    您需要 SQL 连接。表链接是一种完全不相关的技术,与您要实现的目标无关(有关详细信息,请参阅有关 MERGE 引擎的 MySQL 文档)。一般:

    SELECT f.name, b.value
    FROM foo f
    LEFT JOIN bar b ON b.foo_id = f.id
    WHERE f.age > 10
    HAVING b.value IS NOT NULL
    

    为了了解连接是如何执行的,您必须了解数据库引擎如何处理查询 - 特别是 ON、WHERE 和 HAVING 子句中的条件的重要性,它们都适用于不同的阶段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-27
      • 1970-01-01
      • 1970-01-01
      • 2016-09-10
      • 1970-01-01
      • 2011-04-10
      • 1970-01-01
      相关资源
      最近更新 更多