gpt4 book ai didi

mysql - 从一个引用表中获取 MySql 中标签的多个唯一随机行

转载 作者:行者123 更新时间:2023-11-30 23:33:13 25 4
gpt4 key购买 nike

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

id - tagID - itemID1  -  1    -   12  -  2    -   13  -  1    -   24  -  3    -   25  -  4    -   2

etc

I have as input the current itemID, and I want to select one other random item ID for each tag this item has.

The obvious way is to run one query to select the tags of this item, and then one query for each of those tags to select a different itemID for each tag.

For example for the 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

但这会返回该项目标签的所有其他行,而我只需要其中之一。

有人有什么好主意吗?

谢谢

最佳答案

与大多数随机选择一样,在组合查询中有相当多的参数这样做:你必须ORDER BY RAND()这是一个性能 killer 。我的建议是要么使用您周围的语言,要么创建一个搅拌程序:

  • SELECT DISTINCT tagID FROM声明一个游标我的标签 WHERE itemID=1
  • 循环这个游标做
  • SELECT MAX(id) INTO maxid FROM我的标签 WHERE tagID=current_tag_from_cursor AND itemID<>1
  • SELECT itemID FROM我的标签 WHERE tagID=current_tag_from_cursor AND itemID<>1 AND id>CAST(FLOOR(RAND()*maxid) AS UNSIGNED)

是的,您进行了很多查询。是的,这仍然比 ORDER BY RAND() 提供更好的性能在大于几千行的表上

关于mysql - 从一个引用表中获取 MySql 中标签的多个唯一随机行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9518763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com