0

問題: 私の mysql データベースには、リスト共有の 2 つのテーブルがあります。リストテーブルには、ユーザーが作成したすべての To Do リストがあります。

「リスト」テーブル

共有テーブルには、あるユーザーから別のユーザーに共有されたすべてのリストが格納されます。

「共有」テーブル

私がやりたいことは、ユーザーのすべてのリストを取得することです。ユーザーが作成したリストと、アクセスできる共有リストの両方です。現在、共有テーブルにエントリがある場合に完全に機能する select ステートメントがあります (結果を取得している特定のユーザーに関連するかどうかは関係ありません)。

共有テーブルから結果を削除し、同じ複数テーブルの SELECT ステートメントを使用しようとするとすぐに、結果が得られず、理由がわかりません。

私が使用しているSELECTステートメントは次のとおりです。

SELECT DISTINCT `lists`.* FROM `lists`,`shares` WHERE `lists`.user_id = '$userid' OR (`shares`.sharedwith_id = '$userid' AND `lists`.id = `shares`.list_id) ORDER BY `lists`.datecreated DESC

クエリに関するヘルプは素晴らしいでしょう。私はJOINを見てきましたが、私が持っているものよりも効率的なものは見たことがありません.

4

1 に答える 1

1

JOINの代わりに使用する必要があります。WHERE

SELECT DISTINCT `lists`.* 
FROM `lists`
LEFT JOIN `shares`
ON `lists`.`id`=`shares`.list_id AND `lists`.`user_id`=`shares`.`sharedwith_id`
WHERE `lists`.`id` = ?

最後に、SQL インジェクション攻撃を回避します。SQL に引数を埋め込まないでください。引数をパラメーターとして渡します。

于 2016-06-02T15:44:52.090 に答える