0

我有一个清单:

destinations = test_task.destination_list()- 这是一个字符串列表,包含分配给当前 test_task 对象的国家名称。

我有一个带有字段的表CDR :

id(pk)
number(charfield)
area(charfield).

我需要从 CDR 表中选择 3 个随机数,其中每个目的地的 area=destination。

我可以只使用一个选择吗?还是我需要为每个目的地制作一个循环?哪个是正确的方法?

4

2 回答 2

0

正如我在评论中提到的,我认为没有可行的方法可以通过单个查询来做到这一点。如果您使用循环,您可以将随机排序values_list和“ in ”运算符组合用于查询集。

final_list = []
for destination in destinations:
    final_list += YourCDRModel.objects.filter(area__in=destination).values_list('number', flat=True).order_by('?')[0:3]

请注意,如 *order_by* 文档中所述,此查询可能很慢,如果目的地数量很多,可能会变得更慢。

于 2013-01-27T19:00:49.707 回答
0

最简单的方法是确保每个目标按 rand() 排序并限制为 3 进行循环和查询。如果您不想这样做并且想要执行单个查询,mysql 无法返回 3使用单个查询的每行结果。您有义务要求全额退货,并将减少结果数量的逻辑放入我们的代码中。您可以运行诸如“SELECT * FROM CDR WHERE IN (? ,? ...) ORDER BY RAND() 之类的查询,然后循环进入结果,直到每种类型有 3 行。

如果您的目的地数组不是太大,我建议循环进入目的地并查询每个目的地,而不是选择所有可能的结果并使用代码循环进入它。

于 2013-01-27T19:05:40.877 回答