MySQL选择具有最大可能分布的查询

问题描述:

我给一个postfix队列提供随机选择的邮件地址(这些地址与实际的通讯相关)。 Postfix是健康的排队很好,但我仍然想做一点更聪明。MySQL选择具有最大可能分布的查询

我想弄清楚一个MySQL查询选择的电子邮件地址不是随机的,但由最大可能的分散。是否有可能通过单个查询来做这样的事情?或者我需要count different providers然后切片结果并再次选择地址? 后者似乎够傻,第一种方法会更好。

也许只是不好的搜索查询,但我找不到类似的问题/解决方案。

由于提前,

FABRIK

+1

你能定义'弥散'的含义吗? – ethrbunny

+0

@ethrbunny编辑了我的问题,也许发行是一个更好的术语。 – fabrik

+0

也许分散意味着来自每个可能的(注册)域/电子邮件提供商的一个电子邮件地址?因此,gmail.com的一个电子邮件地址,yahoo.com的一个电子邮件地址等 - 但每个提供商都是随机的? – shadyyx

我会走这条路:改变你的数据库表,并添加例如所谓的另一列email_provider。 在登记您可以使用PHP从注册电子邮件地址提取电子邮件服务提供商,并将其存储到该列的通讯这样的价值观应该是yahoo.comgmail.com等等

你也必须创建一个脚本,将逐行走表并更新此电子邮件地址的值以保持数据一致性。

这不应该是很难实现......

然后调用查询,你group by email_providerorder by rand()和选择每各分组提供商只是一个电子邮件地址...

,你应该做...

+0

选择提供不是问题,但选择基于提供商的用户。我不想用冗余数据(提供者)膨胀我的表格。每个提供商选择一个用户是不合适的(尽管我可以选择2,3个我知道的)。我想选择这些不同的供应商,尽可能平等分配。 – fabrik

好的,这是我的错,我忽略了一点问题。

伪查询:

SELECT `subscriber`.`id`, `subscriber`.`email`, `queue`.`subscriber`, 
SUBSTRING(`email`, LOCATE('@', `email`)) AS `domain`, 
COUNT(*) AS `count` 
FROM `queue` 
LEFT JOIN `subscriber` ON `queue`.`subscriber` = `subscriber`.`id` 
GROUP BY `domain` 
ORDER BY RAND() 
LIMIT 0, 100; 

,瞧,分布式电子邮件服务提供商!