我有两张table:
“songs”:歌曲ID,标题,文本,liryc -作者ID,例如12 -一个作者具有ID 12,或46,60-因为有两个liryc的作者。
第二个,“authors”是作者的id,名字,姓氏表。事情是FTS搜索标题并返回:id,title和autor的名字在一个查询:
SELECT title,
(SELECT group_concat(name ||''|| surname, ', ')
FROM authors
WHERE id IN (liryc)
) AS lirycist
FROM songs
WHERE title MATCH :q
因为有例如IN(46,60)手写,结果是好的-两个名字由逗号分隔。但是如果我使用列名- IN(liryc)-并且有两个或更多的id,例如46,60,32- '46,60,32',因为我理解它传递-在thousends CAST trys之后没有结果或只有一个名字。像:
... id IN(CAST(liryc) AS INT)) AS lirycist ...
或
... id IN(CAST(liryc) AS TEXT,BLOB,VARCHAR,etc...)) AS lirycist ...
没有PHP函数:
function sliceit($ids){
return implode(",",array_map('intval',explode(',', $ids)));
}
... id IN(sliceit(liryc)) AS lirycist ...
或
... id IN(CAST(sliceit(liryc) AS ALL_POSIBILLITIES) AS lirycist ...
返回一个结果或无结果...
有什么建议吗?
1条答案
按热度按时间ktca8awb1#
由于向IN()子句中传递值并不容易,因此替代方法是使用多个ORLIKE。
--列liryc可能是12或23,45,345
或者使用SQLite替代MySQL FIND_IN_SET:
http://www.mobileonly.com/sqlite-equivalent-zu-mysql-find_in_set/
哪些接缝要快一点(肯定要短一些)
在列 liryc value的开头和结尾创建空的“values/strings”。