MySQL中的连接表

时间:2014-02-18 04:47:15

标签: php mysql sql

(抱歉,我的英语不是很好) 嗨,我正在尝试学习如何使用MySQL中的联结表,我无法想象如何做某事。我知道MySQL的基础知识,但我从未使用过“JOIN”。

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

第二个问题,假设一个应用程序可以适用于两个不同的类别,我如何设法在我的数据库中为该应用程序提供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

+-----------------+-----------------+
| 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           |                                                      
+----------------+--------------------+

1 个答案:

答案 0 :(得分: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,但是将两列一起用作ONE 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           |                                                      
+----------------+--------------------+