MySQL Query Help - 将标记功能转换为SQL数据库

时间:2016-01-13 10:45:23

标签: php mysql sql mysqli

我目前正在尝试将我网站的功能从利用php和文本文件转换为利用MySQL数据库。我填写了数据库设置和表格。

数据库包含以下内容:

Table: Items
Columns: Item_ID, Item_Name

Table: Tags
Columns: Tag_ID, Tag_Name

Table: Items_Tags
Columns: Item_ID, Tag_ID

如何创建以下查询?

1)返回与名为“x”的项目具有4个或更多相同标签的所有项目的名称。

  

例如,假设项目x具有标签a,b,c,d,e,f并且项目y具有标签a,b,c,d然后我需要返回y和其他具有至少4个的标签与x

相同的标签

2)返回2个项目共有的标签名称

  

扩展上面的一个,使用x和y,返回a,b,c,d,因为它们有共同点

3)返回具有以下标记'a','b','c'

的项目的名称
  

将返回x和y,因为它们有a,b,c作为标记

到目前为止我的尝试

删除,因为它们甚至没有关闭

2 个答案:

答案 0 :(得分:0)

使用post.fetchLikes()

GROUP BY

答案 1 :(得分:0)

#1

select i.item_name, t.tag_name,
count(t.tag_tame) as tag_count
from items i, tags t, items_tags it
where i.item_id = it.item_id
and t.tag_id = it.tag_id
and Upper(i.item_name) = Upper('x')
group by i.item_name, t.tag_name
having count (it.tag_id) >= 4

#2

select i.item_name, t.tag_name
from items i, tags t, items_tags it  
where i.item_id = it.item_id
and t.tag_id = it.tag_id
and Upper(i.item_name) like Upper(:item_name)    /* :item_name acts as  parameter and let you send any item_name you need */
group by t.tag_name, i.item_name
having count (it.tag_id) >= 1

#3

select i.item_name, t.tag_name
from items i, tags t, items_tags it  
where i.item_id = it.item_id
and t.tag_id = it.tag_id
and ((Upper(t.tag_name) = Upper('a')) or
     (Upper(t.tag_name) = Upper('b')) or
     (Upper(t.tag_name) = Upper('c')))
group by t.tag_name, i.item_name