我正在创建一个 iOS 应用程序,但我在使用 PHP 编写的 Web 服务部分遇到了困难。我想要实现的是,向设备发送推送通知。我已经完成了那部分。但是,我需要一种机制来区分已成功传送到手机和未成功传送到手机的通知。为此,我使用了一个反馈网络服务,它也能正常工作。有一个具有以下结构的 MySQL 表。我根据每个通知的状态位,收集每个设备token对应的所有通知,做成一个数组发给设备。这就是我面临的困难。
我有两张 table 。
此表存储通知 ID、设备 token 和通知状态。通过查看此表,我的脚本可以确定通知是否已发送到特定设备。我的脚本收集所有未传送到特定设备 ID 的通知 ID,并使用以下 apps_notif 表来获取未传送的通知。表结构如下。
我的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 notifyId
和 table2 notifyId
,您将不会获得所需的输出。首先检查应该如何设计表格的正确标准。
关于php - 根据另一个MySQL select操作返回的数据数组获取MySQL数据并存储到一个PHP数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33050725/