【发布时间】:2016-01-08 03:18:25
【问题描述】:
我正在创建一个 iOS 应用程序,但在使用 PHP 编写的 Web 服务部分时遇到了困难。我想要实现的是,向设备发送推送通知。我已经完成了那部分。但是,我需要一种机制来区分已成功发送到手机的通知和未成功发送的通知。我为此目的使用了一个反馈网络服务,它也在工作。有一个具有以下结构的 MySQL 表。根据每个通知的状态位,我收集每个设备令牌对应的所有通知,并将其制成数组发送给设备。这是我面临困难的地方。
我有两张桌子。
此表存储通知 ID、设备令牌和通知状态。通过查看此表,我的脚本可以确定通知是否已发送到特定设备。我的脚本收集所有未传递到特定设备 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 表)
我可以看到有两行符合条件。
【问题讨论】:
-
您可以使用JOINS从2个表中获取数据,而不是先从notif_status表中获取数据,然后像
SEELCT a.* from apps_notif a JOIN notif_status b ON b.notif_id = a.notif_id WHERE b.notif_status=0 AND b.dev_token='$device_token'那样获取apps_notif表中的数据 -
你能告诉我如何在php中做到这一点吗?用上面的代码?我仍然对循环感到困惑。
标签: php ios mysql foreach while-loop