Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
发送每日通知电子邮件的正确加入(PHP、Mysql)_Php_Mysql_Sql - Fatal编程技术网

发送每日通知电子邮件的正确加入(PHP、Mysql)

发送每日通知电子邮件的正确加入(PHP、Mysql),php,mysql,sql,Php,Mysql,Sql,我正在建立一个每日通知电子邮件脚本 我需要将4个表连接到user表,并且需要在while$user=mysql\u fetch\u array$result{语句中包含user\u email 我能够让它与1个表的外部联接一起工作,但是在第一个表联接的结果用完之后,我很难获得语法来执行另一个表联接的目标。我希望mysql查询获取内容,直到每个用户的第一个联接用完,然后开始显示第二个用户的数据连接查询在while循环中执行。这可能吗?如果可能,语法是什么 现行守则: $sql = "SELECT

我正在建立一个每日通知电子邮件脚本

我需要将4个表连接到user表,并且需要在while$user=mysql\u fetch\u array$result{语句中包含user\u 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";
因此,对于每个用户,我希望显示适用于他们的每个竞赛条目字段,然后显示适用于他们的每个竞赛字段

注意:为了节省处理能力/时间,我可能只会将所有竞赛存储在一个字符串中,然后在以后将它们添加到每封电子邮件中,但我想用这个例子来找到正确的多重加入技术

$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中对结果集进行迭代,该结果集已按用户和竞赛进行排序和分组

如果您还没有任何方法将用户与竞赛联系起来,我猜您仍在设计应用程序和数据库结构。您可以使用它显示与所有竞赛相关的用户,然后在WHERE子句中试验应用条件:


SQL中的是左外联接和右外联接。但不仅仅是外联接。@Bob:你不认为有人会猜测你的4表结构是什么,是吗?我认为stackoverflow用户是很好的猜测者。不过,说真的,我真的很想看看这三个表的示例,所以我知道如何将其应用到选项卡的其余部分les.选择哪些竞赛适用于用户的标准是什么?您在下面回答中的评论听起来好像您想要所有竞赛,而问题描述的是显示特定竞赛。@Bob:正如@Thomas所问,您所说:我想显示适用于他们的每个竞赛字段。该应用程序如何兴高采烈?嘿-差不多了,除了没有参加比赛的钥匙外,我们正在进行所有的比赛,然后我猜不出更多。发布表格及其字段,我们可以建议添加或更改结构。在竞赛和竞赛实体中应该有一个公共字段,以便两个表格可以在查询中关联。这个连接语法x限制竞赛。它应该加入所有竞赛-也许join不是正确的语法?是的,这是通常需要的行为。您可以在一个查询中显示所有用户和竞赛组合,但这可能效率低下,特别是因为您希望在以后的PHP中对数据进行tmanipulate。您可以只使用两个查询并将数据合并到您的数据库中应用程序代码。与…上的加入竞赛不同,您可以使用交叉加入竞赛来显示所有此类组合
$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 " ;