Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

kueri mysql dalam kueri dengan pemeriksaan kondisi privasi

Silakan, coba kueri ini (juga di SQL Fiddle ):

SELECT p.id, p.user_id, m.username, m.privacy,
       searcher.username "Searcher", p.status_msg
  FROM posts p
  JOIN members m ON m.id = p.user_id
  LEFT JOIN following f ON p.user_id = f.user_id
  JOIN members searcher ON searcher.username = 'userA'
 WHERE (m.privacy = 0 OR (m.privacy = 1 AND f.follower_id = searcher.id)
                      OR m.id = searcher.id)
   AND p.status_msg LIKE '%New%'
 ORDER BY p.id
 LIMIT 5;

Saya menghapus username bidang dari posts tabel, karena berlebihan. Selain itu, saya menamai tabel dan kolom sedikit berbeda, jadi kueri mungkin memerlukan perubahan kosmetik untuk skema Anda.

Baris pertama di WHERE klausa adalah salah satu yang Anda cari, ia memilih posting dalam urutan berikut:

  1. Postingan pertama dari anggota tanpa privasi;
  2. Kemudian posting dari anggota yang diikuti oleh searcher saat ini;
  3. Akhirnya, postingan dari anggota itu sendiri.

EDIT:

Kueri ini menggunakan pengenal asli:

SELECT p.id, p.`userID`, m.username, m.privacy,
       searcher.username "Searcher", p.`statusMsg`
  FROM posts p
  JOIN `myMembers` m ON m.id = p.`userID`
  LEFT JOIN following f ON p.`userID` = f.user_id
  JOIN `myMembers` searcher ON searcher.username = 'userD'
 WHERE (m.privacy = 0 OR f.follower_id = searcher.id OR m.id = searcher.id)
   AND p.`statusMsg` LIKE '%New%'
 ORDER BY p.id
 LIMIT 5;

EDIT 2:

Untuk menghindari duplikat jika ada beberapa pengikut untuk pengguna dari posts tabel, bergabung dan menyaring kondisi harus diubah dengan cara berikut (pada SQL Fiddle ):

SELECT p.id, p.user_id, m.username, m.privacy,
       searcher.username "Searcher", p.status_msg
  FROM posts p
  JOIN members m ON m.id = p.user_id
  JOIN members searcher ON searcher.username = 'userC'
  LEFT JOIN following f ON p.user_id = f.user_id
   AND follower_id = searcher.id
 WHERE (m.privacy = 0 OR (m.privacy = 1 AND f.id IS NOT NULL)
                      OR m.id = searcher.id)  
 ORDER BY p.id
 LIMIT 5;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL menganggap subquery diturunkan padahal tidak!

  2. mysql dapatkan perbedaan alih-alih SUM

  3. String karakter UTF8 MySQL tidak valid saat mengimpor tabel csv

  4. Bagaimana cara menyinkronkan database SQLite di ponsel Android dengan database MySQL di server?

  5. Apa tujuan menggunakan mysql_secure_installation?