我有两个表,简化为以下组合填充的表格:由顶n行从其他两个表
users:
+-----+------+-----------+
| id | name | timestamp |
+-----+------+-----------+
vouchers:
+-----+------+
| id | code |
+-----+------+
我也有一个第三表,将含有ID的对:
recipients:
+-----+------+------+
| id | u_id | v_id |
+-----+------+------+
当用户的行超过两周时(查询将计划每天运行一次),我需要定期向收件人表中插入新的ID对。不应检索收件人表中已存在的ID。
我现在无法找到两个初始SELECT查询返回的任意配对ID的一种有效的方法:
1. SELECT id FROM users WHERE date < NOW() - INTERVAL 2 WEEK AND id not in (select u_id from recipients)
2. SELECT id FROM vouchers WHERE id not in (select v_id from recipients) limit *by number of retrieved user IDs*
到目前为止,我试图加入的都未能达到预期的效果。我已经使用上述两个查询建立了解决方案,使用PHP for循环将插入前的结果配对,但我很清楚这很糟糕。
由于提前,
目前尚不清楚你添加了哪些对。对于大于2周大的每个用户,是否为系统中的每个*未分配的凭证添加一个收件人对? – 2012-01-30 12:18:16
不,你在谈论笛卡尔产品?每个用户配对与每张优惠券配对?下面的比喻可能会有所帮助:用户排在队列中,前面的那些人可以通过旋转式,并在他们通过时获得单一凭证。 – user1177756 2012-01-30 12:44:17