从一个参考表中获取MySql中标记的多个唯一随机行

时间:2012-03-01 15:18:35

标签: mysql

我有一个表格,其中标签和项目之间的引用存储在我的数据库中,格式为

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

但是这会返回此项目标记的所有其他行,而我只想要其中一行。

任何人都有什么好主意吗?

由于

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提供了更好的性能