2015-05-29 73 views
-2

我在mysql中3相关的表,这样的事情:如何打印所有项目与X标签

Table: Items 
Columns: ID, Item_ID, Item_Title, Content 

Table: Tags 
Columns: Tag_ID, Tag_Title 

Table: Items_Tags 
Columns: Item_ID, Tag_ID 
  • 的Item_ID项目表的外键。

  • Items_Tags是一个相关表。

现在我想打印的所有项目与X标签。

例如:

// Items 
+-----+-----+---------+-----------------+ 
| 1 | 123 | tile1 | content1  | 
----------------------------------------- 
| 2 | 123 | tile2 | content2  | 
----------------------------------------- 
| 3 | 444 | tile3 | content3  | 
----------------------------------------- 
| 4 | 333 | tile4 | content4  | 
----------------------------------------- 

// Tags 
+------+-----+ 
| 22 | php | 
-------------- 
| 23 | js | 
-------------- 
| 11 | sql | 
-------------- 

// Item_Tags 
+-------+-----+ 
| 123 | 22 | 
--------------- 
| 444 | 23 | 
--------------- 
| 333 | 11 | 
--------------- 

我不知道为什么我很困惑,只是我知道我应该使用join,但是怎么样?! 我如何使用php标签打印所有项目?

+0

这个问题有点短暂的信息。你可以分享你的尝试,以及你遇到了什么问题? –

+0

@JayBlanchard我想打印所有具有相同标签的项目!我应该怎么做?上面的例子是 – Shafizadeh

+0

是样本数据吗?用更少的数据扩展示例。每个表格中的单行不起作用 – Makesh

回答

2

您只需将您的表连接在一起,然后根据需要搜索标签标题。

SELECT * FROM items i 
LEFT JOIN item_tags it ON i.item_id = it.item_id 
LEFT JOIN tags t ON t.tag_id = it.tag_id 
WHERE tag_title = 'x' 
+0

打我:D – marijnz0r

+0

然后结果将是Items表中的前两行? – Shafizadeh

+0

而不是问,试试吧。但是,会的。 – Styphon

0

这对你有用;

SELECT * FROM Items AS I,Tags AS T, Items_Tags AS IT 
WHERE I.ID = IT.Item_ID 
AND T.ID = IT.Tag_ID 
AND WHERE T.Tag_Title = 'x' 
+0

这个算法是最优的?为什么不使用'join'? – Shafizadeh

+0

是的,它喜欢加入。简单的方法:D – hurricane