php - MySQL 中的连接表

标签 php mysql sql

(抱歉,我的英语不是很好) 你好,我正在尝试学习如何使用 MySQL 中的联结表,但我不知道该怎么做。我了解 MySQL 的基础知识,但我从未使用过“JOIN”。

在这个测试项目中,我希望能够在页面上显示给定类别的应用程序(您单击“游戏”,只有“游戏”类别中的应用程序才会显示在页面上)。我想知道 SQL 请求应该是什么样子。

第二个问题,假设一个应用程序可以适合 2 个不同的类别,我如何才能在我的数据库中为该应用程序提供 2 个不同的 Category_ID ?

这是我的数据库目前的样子:

表名称:APPS

+------------+-------------------+
| App_ID (pk)|     App_Name      | 
+------------+-------------------+
|    1       |  Weather Network  |                  
|    2       |  Is it sunny 2.0  |                          
|    3       |  The Weather App  |
|    4       |  Zelda            |
|    5       |  Megaman          |
|    6       |  Doom 3           |                                
+------------+-------------------+

表名称:类别

+-----------------+-----------------+
| Category_ID (pk)|  Category_Name  | 
+-----------------+-----------------+
|     1           |     Games       |                  
|     2           |     Weather     |                                                      
+-----------------+-----------------+

表名称:JUNCTION_APP_CATEGORY

+----------------+--------------------+
|    APP_ID (pk) |   Category_ID (pk) | 
+----------------+--------------------+
|      1         |        2           |                  
|      2         |        2           |
|      3         |        2           |                  
|      4         |        1           |
|      5         |        1           |                  
|      6         |        1           |                                                      
+----------------+--------------------+

最佳答案

对于你的第一个问题,答案是

SELECT a.*, c.*
FROM APPS a, CATEGORY c, JUNCTION_APP_CATEGORY ac
WHERE a.App_ID=ac.APP_ID
  AND c.Category_ID=ac.Category_ID
  AND ac.Category_ID=<category_id for category "Games">

对于第二个问题,您可以使用 APP_IDCategor_ID 作为表 JUNCTION_APP_CATEGORY 的主键(注意不是两个 pks,但是将两列一起用作一个 pk)。这样你就可以像这样放置数据:

+----------------+--------------------+
|    APP_ID (pk) |   Category_ID (pk) | 
+----------------+--------------------+
|      1         |        1           |        <-- APP_ID=1 belongs to both cat 1 & 2          
|      1         |        2           |                  
|      2         |        2           |
|      3         |        2           |                  
|      4         |        1           |
|      5         |        1           |                  
|      6         |        1           |                                                      
+----------------+--------------------+

关于php - MySQL 中的连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21844599/

相关文章:

sql - 查找满足条件但不四舍五入的行的百分比

sql - 如何在创建表时为之后创建的表添加外键?

javascript - 我想通过javascript隐藏基于PHP条件的提交按钮

php - PHPExcel中如何确定打印区域的最后一行?

php - 使用 wkhtmltopdf 静态二进制文件时找不到 libjpeg.so.8

带有日期的mysql单元格值作为带有年份的新列

php - Ratchet PHP内存泄漏

php - 如何使用 if 语句显示属于日期范围的记录

MySQL - 一个子查询和一个 WHERE IN

sql - 逻辑搜索字段数据库选择问题