Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按常用标记计数查找相似项目和订单_Php_Mysql_Sql_Inner Join - Fatal编程技术网

Php 按常用标记计数查找相似项目和订单

Php 按常用标记计数查找相似项目和订单,php,mysql,sql,inner-join,Php,Mysql,Sql,Inner Join,我搜索了类似的问题,但解决方案针对不同的情况,具有不同的表格结构:( 我需要获得具有类似标记的design_id的列表,按最常见标记的条目排序 表结构: shop_tags (tag_id, tag_name) shop_tags_link (tag_id, design) shop_tshirts (design_id, article_id) 假设我有4种设计 design_id 1 tags = red, blue design_id 2 tags = black, grey desig

我搜索了类似的问题,但解决方案针对不同的情况,具有不同的表格结构:(

我需要获得具有类似标记的design_id的列表,按最常见标记的条目排序

表结构:

shop_tags (tag_id, tag_name)
shop_tags_link (tag_id, design)
shop_tshirts (design_id, article_id)
假设我有4种设计

design_id 1 tags = red, blue
design_id 2 tags = black, grey
design_id 3 tags = yellow, green
design_id 4 tags = white, red, black
design_id 5 tags = red
输入是设计ID的数组:

$input = array("1", "2");
我需要找到具有类似标签的设计,并根据通用标签计数(desc)对其进行排序,因此,如果输入为设计1和2,我们将寻找具有“红色、蓝色、黑色、灰色”标签的设计,这将按此顺序给出以下结果:

设计4、设计5
(当然不包括原始输入设计)


最后,我不需要返回设计ID,而是需要从具有匹配设计的table shop_tshirts中找到相应的article_ID。这样做的最佳方法是什么?我应该执行单独的查询还是另一个内部联接?

重新说明我们必须处理的内容,以便解决方案更加明显:

+-----------+    +-----------------+    +--------------+
| shop_tags |    | shop_tags_links |    | shop_tshirts |
+-----------+    +-----------------+    +--------------+
| tag_id    |----| tag_id          |  /-| design_id    |
| tag_name  |    | design_id       |-/  | article_id   |
+-----------+    +-----------------+    +--------------+

design_id 1 tags = red, blue
design_id 2 tags = black, grey
design_id 3 tags = yellow, green
design_id 4 tags = white, red, black
design_id 5 tags = red

+-----------+   +-----------------+   +--------------+
| shop_tags |   | shop_tags_links |   | shop_tshirts |
+-----------+   +-----------------+   +--------------+
| 1 red     |   |   1  1          |   | 1  ?         |
| 2 blue    |   |   2  1          |   | 2  ?         |
| 3 black   |   |   3  2          |   | 3  ?         |
| 4 grey    |   |   4  2          |   | 4  ?         |
| 5 yellow  |   |   5  3          |   | 5  ?         |
| 6 green   |   |   6  3          |    
| 7 white   |   |   7  4          |   
|           |   |   1  4          |   
                |   3  4          |   
                |   1  5          |   
“查找具有相似标记的设计,并按常用标记计数(desc)对其进行排序”, 因此,如果输入为设计1和2,我们正在寻找带有标签“红、蓝、黑、灰”的设计,该标签将按此顺序给出以下结果:

设计4、设计5(当然不包括原始输入设计)

这应该让你指向正确的方向。这是我不知道的,未经测试,所以它可能需要一些调整,但它应该涵盖主要的概念

select count(b.tag_id) as mysort, b.design_id, c.article_id
from shop_tags_links as a, shop_tags_links as b inner join shop_tshirts as c on b.design_id=c.design_id
where 
    a.design_id IN (?,?) AND
    a.tag_id=b.tag_id AND
    b.design_id NOT IN(?,?) 
group by b.design_id
order by mysort desc