我正在构建每日通知电子邮件脚本。
我需要将4个表连接到用户表,并且我需要在每个while ($user = mysql_fetch_array($result)){
语句中使用user_email。
我能够使用带有1个表的外连接来实现此功能,但是在第一个表连接用完结果后,我无法使用不同的表来执行目标来执行目标。我希望mysql查询获取内容,直到第一个连接用完(对于每个用户),然后开始显示第二个连接查询的数据(所有在while循环中执行)。这是可能的,如果是这样,语法是什么?
现有代码:
$sql = "SELECT *
FROM users
OUTER JOIN contest_entries ON contest_entries.email = users.email ";
$result = mysql_query($sql) or die (mysql_error());
我要附加的第二个查询是获得所有新的竞赛。
$sql = "SELECT *
FROM contests";
因此,对于每个用户,我希望显示适用于它们的每个contest_entries
字段,然后显示适用于它们的每个contests
字段。
注意:为了节省处理能力/时间,我可能只是将所有竞赛存储在一个字符串中,然后将它们添加到每个电子邮件中,但我想用这个例子来找到正确的多重连接技术。
答案 0 :(得分:2)
$sql = "SELECT *
FROM users
LEFT JOIN contest_entries
ON contest_entries.email = users.email
JOIN contests
ON contests.id = contest_entries.contestid
ORDER BY users.email --- or whatever other order you need
, contest.id ";
然后,您可以在已经按用户和竞赛排序(并分组)的结果集上迭代PHP。
如果您还没有任何方式将users
与contests
联系起来,我猜您仍在设计应用程序和数据库结构。您可以使用它来显示与所有竞赛相关的用户,然后在WHERE
子句中尝试应用条件。:
$sql = "SELECT *
FROM users
LEFT JOIN contest_entries
ON contest_entries.email = users.email
CROSS JOIN contests
WHERE ( contests.started >= NOW() - interval 3 day ) --- new contests
AND ( users.age <= contests.agelimit )
AND ( some other condition )
ORDER BY users.email --- or whatever other order you need
, contest.id " ;