問題:私のmysqlデータベースには、2つのテーブルリストと共有があります。リストのテーブルは、ユーザーが作成したことのリストを行うためのすべてを持っています:
株式のテーブルには、別のユーザーから共有されているすべてのリストを格納します。
私がやりたいのは、ユーザーが作成したリストとアクセスできる共有リストの両方の、ユーザーのすべてのリストを取得することです。現在、sharesテーブルにエントリがある場合に完全に機能する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を見てきましたが、私が持っているものよりも効率的なものは見当たりませんでした。
あなたは本当に句の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に引数を埋め込まないでください。引数をパラメーターとして渡します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加