2016-04-02 10 views
0

私は、ポーリング通知機能を刺激するアンドロイドアプリケーションを開発しています。したがって、私はサーバーに新しいデータを要求し続けるサービスを作成しました。しかし、私はデータベースにSeenと呼ばれるテーブルを使用しました。このテーブルは、特定のuser_idについてサーバから尋ねられ、そのテーブルにnews_idが存在しなかった場合に通知を生成します。新しいデータのみデータベースから取得

問題は初めてアプリケーションを起動するときです。ユーザーを考慮しているサーバーがニュースを見なかったため、データベースからすべてのデータを取得します。

誰でも私を助けることができますか?

私はこのアイデアで解決することを考えました:最初にアプリケーションを起動するとき。新しいメッセージを0にするには、そのuser_idを持つすべてのニュースを見たテーブルに挿入します。しかし、私はそれが効率的ではないと思う。

これは私のデータベースと私のPHPスクリプト

ユーザーテーブル表

User_ID | User_Name 
-------------------- 
1  | John 
2  | Carl 
3  | Tomas 
4  | Adam 
5  | Nancy 

ニュース表

News_ID | News_Text  | news_date   
--------------------------- 
1  | Hello World | CURRENTDATE() 
2  | This is My car | CURRENTDATE() 
3  | I had Ate pizza| CURRENTDATE() 
4  | Leave Me Alone | CURRENTDATE() 
5  | C++ Programming| CURRENTDATE() 

です

ID | User_Id | News_Id --------------------------- 1 | 1 | 2 2 | 1 | 3 3 | 4 | 1 4 | 5 | 3 5 | 1 | 4 

これは私のPHPコードであり、それはまたSeen_news表には表示されませんでしたニュースを得るために、私のクエリを示す:

<?php 

require('config.php'); 
$conn = mysqli_connect($servername, $username, $password, $db); 
$query="SELECT * FROM news WHERE news_id NOT IN (SELECT news_id FROM news_seen WHERE user_id = '".$_GET['id']."')"; 

$result = mysqli_query($conn,$query); 
$rows = array(); 
echo mysqli_error($conn); 

while($row = mysqli_fetch_assoc($result)) { 
    $rows[] = $row; 
} 

echo json_encode($rows); 
?> 

は、私はPHPスクリプトにUSER_IDを送信し、ベースいたとすると結果にはjsonファイルが表示されます。

+0

あなたはまだあなたの問題への解決策を見つけましたか? – gmfm

+0

はい私の問題を解決しましたありがとうございます。 –

答えて

1

ユーザーテーブルにcreate_date列を追加することができる場合は、news_dateが見える場所がユーザーcreate_dateより大きい場所を選択できます。

のような何か:

"SELECT * FROM news WHERE news_id NOT IN (SELECT news_id FROM news_seen WHERE user_id = '".$_GET['id']."') AND news_date > (SELECT create_date FROM user WHERE user_id = '".$_GET['id']."')" 
関連する問題