php - 根据另一个MySQL select操作返回的数据数组获取MySQL数据并存储到一个PHP数组中

标签 php ios mysql foreach while-loop

我正在创建一个 iOS 应用程序,但我在使用 PHP 编写的 Web 服务部分遇到了困难。我想要实现的是,向设备发送推送通知。我已经完成了那部分。但是,我需要一种机制来区分已成功传送到手机和未成功传送到手机的通知。为此,我使用了一个反馈网络服务,它也能正常工作。有一个具有以下结构的 MySQL 表。我根据每个通知的状态位,收集每个设备token对应的所有通知,做成一个数组发给设备。这就是我面临的困难。

我有两张 table 。

THis is the notif_status table

此表存储通知 ID、设备 token 和通知状态。通过查看此表,我的脚本可以确定通知是否已发送到特定设备。我的脚本收集所有未传送到特定设备 ID 的通知 ID,并使用以下 apps_notif 表来获取未传送的通知。表结构如下。

apps_notif table

我的PHP/MySQL脚本如下。

$fecthnotif=mysqli_query($mysqli,"SELECT notif_id FROM notif_status WHERE notif_status=0 AND dev_token='$device_token'") or die(mysqli_error($mysqli));

$d2=array();     
    while($row = mysqli_fetch_assoc($fecthnotif)) {  
    $d2[]=$row;

$json = json_encode($d2);

    $arr = json_decode( $json,true);

此时,我收到了一系列未送达的通知,格式为 JSON。结果如下。

[{"notif_id":"124"},{"notif_id":"129"}]

现在,我按如下方式遍历结果。

foreach($arr as $item) { //foreach element in $arr
    $uses= $item['notif_id']; }

我想要实现的是从上面的结果中获取每个 notif_id,从 apss-Notif 表中获取所有通知数据,使其成为一个 JSON 对象并将该有效负载返回给应用程序。因此 JSON 应该具有所有最初未送达的所有通知的通知数据。

在 foreach 循环中,我编写了一个查询循环来将所有待处理的通知存储到数组中,但它不起作用。

$d=array();

foreach($arr as $item) { //foreach element in $arr
    $uses= $item['notif_id']; //etc
    //echo $uses;
    $sendnotif=mysqli_query($mysqli,"SELECT * FROM apps_notif WHERE notif_id='$uses'") or die(mysqli_error($mysqli));
    while($row = mysqli_fetch_assoc($sendnotif)) {  
    $d[]=$row;
    $i++;
    }
}

编辑:基本上,我想要实现的是从 apps_notif 表返回符合条件的行,notif_status=0(来自表 notif_status)和 dev_token="qwerty"(来自 apps_notif 表)

我可以看到有两行符合条件。

最佳答案

希望对你有帮助

SELECT b.* 
FROM notif_status a 
INNER JOIN apps_notif b ON a.notif_id = b.notif_id 
WHERE notif_status = 0 
  AND dev_token = '$device_token';

使用子查询,

SELECT * 
FROM app_notify 
WHERE notify_id IN (SELECT notif_id 
                    FROM notif_status 
                    WHERE notif_status = 0 
                      AND dev_token = '$device_token') ;

在您的表格中查看。在表 1 中,您有 notify_id,但在 table 2 中,您有 date 具有类似的值。因此,如果您匹配 table1 notifyIdtable2 notifyId,您将不会获得所需的输出。首先检查应该如何设计表格的正确标准。

关于php - 根据另一个MySQL select操作返回的数据数组获取MySQL数据并存储到一个PHP数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33050725/

相关文章:

ios - 在 swift 4 中返回之前强制等待 Alamofire 响应

ios - 带有子类 Objective-C 类的 Swift 构建错误(涉及单词 "class"作为参数)

ios - 根据用户输入日期快速启用和禁用时间选择器过去的时间

mysql - 这是解决sql中最低性能问题的好方法

mysql - 选择与 MySQL/phpMyAdmin 中的 ID 相同的值的单元格

php - 这就是用 PHP 和 Ajax 防止 CSRF 所需要做的全部工作吗?

php - Zend 导航菜单 Accordion

MySql SUM 和 JOIN

PHP 放弃 SQlite?

php - 单个字符给出错误 : "Data too long for column" when using PDO with MySQL - Why?