-1

所以,这是我的数据库:

Item
+---------+-------+
| item_id | name  |
+---------+-------+
|       1 | item1 |
|       2 | item2 |
|       3 | item3 |
|       4 | item4 |
+---------+-------+
Type
+---------+-------+
| type_id | name  |
+---------+-------+
|       1 | type1 |
|       2 | type2 |
|       3 | type3 |
+---------+-------+
Relation
+-----------+-----------+---------+
| a_item_id | b_item_id | type_id |
+-----------+-----------+---------+
|         1 |         2 |       1 |
|         2 |         3 |       1 |
|         1 |         2 |       2 |
|         4 |         1 |       3 |
+-----------+-----------+---------+

我想获取特定项目的关系。例如SELECT ... WHERE item_id = 1应该输出:

+-----------+-------------+-----------+-------------+---------+
| a_item_id | a_item_name | b_item_id | b_item_name | type_id |
+-----------+-------------+-----------+-------------+---------+
|         1 | item1       |         2 | item2       |       1 |
|         1 | item1       |         2 | item2       |       2 |
|         4 | item4       |         1 | item1       |       3 |
+-----------+-------------+-----------+-------------+---------+
  • 项目的位置 (a/b) 很重要。
  • 对于相同的type_id,两个item之间只有一种关系。(不能颠倒位置)

查询会很好,但如果您知道如何使用 medoo ( http://medoo.in/api/select ),我将非常感谢它的转换。

4

1 回答 1

0

解决方案比我预期的要容易,查询需要relation表中外键的两个连接。表别名是强制性的,以防止列名不明确。

SELECT a_item_id, a_item.name AS a_item_name, b_item_id, b_item.name AS b_item_name, type_id
FROM relation
INNER JOIN item a_item ON a_item.item_id = a_item_id
INNER JOIN item b_item ON b_item.item_id = b_item_id
WHERE a_item_id = 1 OR b_item_id = 1

我没有找到用 medoo 创建表别名的方法,所以我不得不使用该query方法。

于 2014-11-23T09:44:52.557 回答