我有一个表格,其中标签和项目之间的引用存储在我的数据库中,格式为
id - tagID - itemID 1 - 1 - 1 2 - 2 - 1 3 - 1 - 2 4 - 3 - 2 5 - 4 - 2
等
我输入了当前的itemID,我想为此项目的每个标签选择一个其他随机商品ID。
显而易见的方法是运行一个查询来选择此项的标记,然后对每个标记进行一次查询,为每个标记选择不同的itemID。
例如,对于itemID“1”
SELECT tagID FROM mytags WHERE itemID=1
然后foreach tagID“X”
SELECT itemID FROM mytags WHERE tagID= "X" AND itemID!=1
但是如果一个项目有10个标签,这将导致11个查询仅适用于我的应用程序的这一部分。
我试图找到一种方法来运行单个SQL来获得相同的结果。
一个良好的开端是以下
SELECT tagID, itemID
FROM `mytags`
WHERE tagID IN ( SELECT tagID
FROM `mytags`
WHERE itemID =1 )
AND itemID !=1
但是这会返回此项目标记的所有其他行,而我只想要其中一行。
任何人都有什么好主意吗?
由于
答案 0 :(得分:0)
最常见的是随机选择,在组合查询中有很多参数不:你必须ORDER BY RAND()
这是一个性能杀手。我的建议是用你周围的语言工作,或者创建一个激动的程序:
SELECT DISTINCT tagID FROM
mytags WHERE itemID=1
SELECT MAX(id) INTO maxid FROM
{mytags {1}} WHERE tagID=current_tag_from_cursor AND itemID<>1
{mytags {1}} 是的,你做了很多疑问。
是的,这比大于几千行的表格上的SELECT itemID FROM
提供了更好的性能