php - MySQL递归在哪里?

标签 php mysql

我有一个如下所示的数据库:

Token (PRIMARY)     School        Skip
--------------------------------------
f2342f              School 1      0
434fbc              School 1      0
33332c              School 1      0

如果学校与临时数据库匹配,我的 PHP 代码会向每个 token 发送推送通知。然后它将 skip 设置为 1,这样它就不会在一天内尝试发送另一个通知。

问题是我不能让脚本一次设置多个跳过值。当我这样做时,它似乎对第一个标记工作正常,但随后不会为其他标记设置跳过值,然后就死掉了。

这是我的 PHP:

// Run comparison SQL query
        $compare = mysql_resultTo2DAssocArray(mysql_query("SELECT Temp.School, Temp.Status, Snow.Skip, GROUP_CONCAT(Snow.Token SEPARATOR '\', \'') Tokens FROM Temp JOIN Snow USING (School) WHERE Skip = 0 GROUP BY Temp.School"), $con);
        $amount = count($compare);

        // Send Push Notifications
        for ($i = 0; $i < $amount; $i++) {
            $message = $compare[$i][School] . " - " . $compare[$i][Status];
            $tokens = $compare[$i][Tokens];
            pwCall( 'createMessage', array(
                'application' => PW_APPLICATION,
                'username' => PW_LOGIN,
                'password' => PW_PASSWORD,
                'notifications' => array(
                    array(
                        'send_date' => 'now',
                        'content' => $message,
                        'ios_badges' => 1,
                        'ios_sound' => 'bells.caf',
                        'data' => 'daily',
                        'devices' => array($tokens),
                        )
                    )
                )
            );
            if (!mysql_query("UPDATE Snow SET Skip='1' WHERE Token='$tokens[$i]'", $con)) {

                echo "<pre>";
                print_r(str_replace("'", '', $tokens));
                echo "</pre>";

                die('Error: ' . mysql_error());
            }
        }

输出为:

f2342f, 434fbc, 33332c Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 'f2342f', '434' at line 1

所以对我来说,我似乎需要递归地设置跳过,除非我的代码遗漏了一些重要的东西。

$比较:

Array
(
    [0] => Array
        (
            [School] => School 1
            [Status] => Closed 
            [Skip] => 0
            [Tokens] => f2342f', '434fbc', '33332c
        )

)

最佳答案

完成后:

$tokens = $compare[$i]['Tokens'];

$tokens 应该是这样的:

f2342f', '434fbc', '33332c

意味着您的查询应更改为

"UPDATE Snow SET Skip='1' WHERE Token IN('$tokens')"

关于php - MySQL递归在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13441436/

相关文章:

php - 代码覆盖率只覆盖一个测试而不是所有套件

mysql - 忽略 pt-online-schema-change 的警告

php - mysqli 准备问题

php - 根据月份从数据库表中选择总计

php - Drupal 安装在不同的主机上

php - 在 CakePhp 测试中,testAction() 函数在 debug() 上返回 null

php - 数组还是关联?

php - 使用 php 导出的文本文件不会更新

php - 我正在尝试在 Joomla 中添加一个插件,但它给了我一个 fatal error

mysql - 在 SQL 中,如何使用索引来加速此数据库查询?