在IN子句

时间:2017-07-24 20:43:18

标签: mysql

我这里有两张表

         posts                               tags
[   id         title    ]          [   pid          tag   ]
[   1            X      ]          [    1            php  ]
[   2            Y      ]          [    1            pdo  ]
[   3            Z      ]          [    2            php  ]
                                   [    2            ajax ]
                                   [    3            pdo  ]

我在这两个表上都应用了这个查询

$query = "
SELECT a.title FROM posts a
INNER JOIN tags b ON a.id = b.pid
WHERE b.tag IN ($tags)
";

现在,如果

$tags = [php, pdo];

我希望获得$tags匹配值更高的行,因此订单为X->Y->Z

如果

$tags = [php, pdo, ajax]

我希望得到X->Y->Z,但在两个查询中,订单根本不是这样的,它更像是按名称或标签字母顺序排序,我怎么能按顺序排序匹配最高的行,如果可能,只有所有匹配值的唯一行。

1 个答案:

答案 0 :(得分:0)

如果它只是关于标签的出现,您可以按计数进行分组和排序。

像(未经测试的)

DESC

(订购ASCdriver = webdriver.Safari() ,具体取决于你最顶层的东西)

但是,这只会考虑"真实"比赛,任何错字,如" pgp"而不是" php"会破坏搜索结果的质量。