2016-09-28 8 views
-3

私は、ソーシャルネットワークiOSアプリケーションを開発しています。PHPバックエンドをMySQLデータベースとともに使用しています。投稿、コメント、好きなものを保存するためにデータベースに3つのテーブルがあります。MySQLから 'Like'データを効率的にクエリするにはどうしたらいいですか?

現在、さまざまな特定のデータを含む一度に50件の投稿をリクエストしています。私はMySQLからSELECTクエリを使用してこれを行います。私の「Likes」は「Likesテーブル」に1行ごとに格納されます。これには、ユーザー名と、それらが好きな投稿が含まれます。

アプリをリフレッシュすると、読み込まれたばかりの投稿に「Likes」データを収集する必要があります。私の問題は、MySQLにクエリしてそのユーザーと関連するすべてのお気に入りを返す最良の方法を知らないことです。これは、私がいくつかの投稿を読み込んだときに、ユーザーが既に好きな投稿を見てほしいということを意味します。ここで

は私の問題の視覚的な説明です: Here is a visual description of my problem

これらの投稿の最大50が一度に表示されますので、ご了承ください。

+0

あなたのテーブル定義と、あなたがしようとしたSELECTクエリを追加してください。 – MichielB

+0

画像を表示せず、インデックス付きテーブル定義を表示 –

答えて

0

これはいくつかの方法があり、プロジェクトによっては自分の答えを最適化することができます。

あなたのLikesテーブルの構造が(int) id, (int) user_id, (int) post_idであると仮定します。

あなたの質問に直接答えるには(リフレッシュのためだけにクエリを実行することについて)、次のMySQLクエリは、あなたが好きなpost_idのリストを提供します。あなたは、カンマで区切られた50件の記事のIDのリストによって、ユーザのIDで%user_id%%post_ids%を交換する必要があります。

SELECT post_id 
FROM Likes 
WHERE user_id = %user_id% AND 
     post_id IN (%post_ids%) 

しかし、リフレッシュがページ全体(とだけでなく、AJAX要求を意味している場合私はこの質問を直接投稿することを考えています。たとえば、

SELECT p.id, p.content, p...., l.id AS `Liked` 
FROM Posts AS p 
LEFT JOIN Likes AS l 
     ON p.id = l.post_id AND 
      l.user_id = %user_id% 
WHERE ... 

また、右側の列にインデックスを追加することを検討してください。

+0

ありがとうございました。あなたがそこに書いた2番目のコードはとても役に立ちました。実装してテストしたら更新します! – Ollie

+0

もう一度ありがとう、私は私のソリューションを下に追加しました:) – Ollie

0

約束通り、私の解決策はここにある:

SELECT `posts`.`postnumber`, `posts`.`message`, `likes`.`didLike` 
FROM `posts` 
LEFT JOIN `likes` 
ON `posts`.`postnumber`=`likes`.`post_id` 
AND `likes`.`user_id`='USERNAME'; 
関連する問題