mysql为数组中的每个值选择数据

时间:2013-01-27 18:49:22

标签: python mysql django

我有一个清单:

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

我的表格 CDR 包含字段:

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

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

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

2 个答案:

答案 0 :(得分:0)

正如我在评论中提到的,我认为单一查询没有可行的方法。 如果您使用循环,则可以将random orderingvalues_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 * docs中记录的此查询可能很慢,如果目标数量很高,可能会变得更慢。

答案 1 :(得分:0)

简单的方法是确保通过rand()按每个目的地顺序进行循环和查询,并限制为3。 如果您不想这样做并且您想要执行单个查询,则mysql无法通过使用单个查询为每行返回3个结果。您有义务要求完整的返回并使用逻辑来减少代码中的结果数量。您可以运行查询,例如“SELECT * FROM CDR WHERE IN(?,?...)ORDER BY RAND(),并循环到结果,直到每种类型有3行。

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