所以我有一个看起来像这样的表:
cid | tid | score
-----+-------+-------
6 | 383 | 88
2 | 234 | 91
3 | 685 | 77
5 | 543 | 97
etc...
我要做的是在tid列中找到一个序数字段模式,然后在同一列中搜索该模式的其他实例。例如:
我查询显示单个cid的所有tid,按降序排序:
cid | tid | score
-----+-------+-------
6 | 909 | 100
6 | 119 | 99
6 | 221 | 98
6 | 765 | 97
etc...
在tid列中建立了一个模式:909,119,221,765。现在我想找到该模式的其他可能实例,其中cid值是其他的。 (注意:不同的cid可以有相同的tid,所以cid 6可以有tid 909,而cid 4也可以。)
我想在第二个查询中检查模式。模式值可以间隔开,但必须按顺序显示:
QUERY 2:
cid | tid | score cid tid score
--------------------- ---------------------
6 | 909 | 100 5 | 909 < | 100
6 | 119 | 99 5 | 831 | 97
6 | 221 | 98 5 | 793 | 96
6 | 765 | 97 5 | 435 | 96
5 | 404 | 95
5 | 119 < | 94
5 | 221 < | 94
5 | 765 < | 94
比较之后,我希望MySQL返回类似的内容:
cid | tid pattern | instances (in order)
----+---------------+----------------------
5 909 1 (or 0)
5 119 1 (or 0)
5 221 1 (or 0)
5 765 1 (or 0)
在MySQL中有没有合理的方法呢?任何帮助表示赞赏。
答案 0 :(得分:0)
通常,这种操作在行之间不能很好地工作 - 首先将它拉入每个cid的单个记录中:
INSERT INTO summary (c_id, tids)
SELECT cid, GROUP_CONCAT(tid ORDER BY score DESC)
FROM yourtable
GROUP BY cid;
然后,您可以轻松获得模式匹配或超集的所有组合的列表:
SELECT a.cid, a.tids, b.cid, b.tids
FROM summary a, summary b
WHERE a.cid<>b.cid
AND a.cid=6
AND b.tids LIKE CONCAT('%', a.tids, '%');
您可能想看看levenstein函数或卷积(提示:如果您不分析基因组,那么请查看一些代码)。