(抱歉,我的英语不是很好) 嗨,我正在尝试学习如何使用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 |
+----------------+--------------------+
答案 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_ID
和Categor_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 |
+----------------+--------------------+