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

PHP:Cari database mysql menggunakan beberapa daftar dropdown pilih?

$clause = " OR ";//Change  to OR after 1st WHERE

Operator ATAU di atas akan menyebabkan kriteria tempat Anda untuk memilih catatan meskipun 1 kata kunci cocok dengan bidang attr. Ubah ke " DAN " agar semua kata kunci diterapkan.

Selanjutnya, kriteria ... AND ATTRIBUTES.sub_cat_name='$currentproduct'" tampaknya berlaku untuk semua kata kunci, jadi kriteria ini harus ditambahkan satu kali, tidak pada setiap iterasi dari loop. $currentproduct =$_POST['product']; baris juga harus dipindahkan di depan loop.

EDIT:untuk mencerminkan untuk mengubah opreator menjadi AND dan tidak mengembalikan baris apa pun.

...ATTRIBUTES.attr LIKE BINARY '$c'...

Jika tidak ada wildcard di $c, maka kriteria di atas akan membutuhkan kata untuk mencocokkan bidang attr seolah-olah =operator telah digunakan, yang tidak mungkin terjadi. Karakter pengganti harus disertakan dalam pencarian:'%$c%'

Ditambah beberapa perlindungan dari injeksi sql juga bagus.

EDIT2:Jika setiap atribut disimpan dalam catatannya sendiri, maka itu sedikit memperumit, karena kriteria tempat dievaluasi terhadap satu catatan, bukan kumpulan dari mereka.

Saya akan memberi Anda contoh perintah pilih, tetapi Anda harus memasukkannya ke dalam kode php Anda.

select product_details.* FROM product_details INNER JOIN
    (select product_details.id, count(ATTRIBUTES.id) as total
     FROM `product_details`
     INNER JOIN `ATTRIBUTES` ON product_details.id=ATTRIBUTES.id
     WHERE ATTRIBUTES.attr in (...)
     GROUP BY product_details.id
     HAVING total=...) as t
on t.id=product_details.id

Subquery menghitung berapa banyak atribut yang cocok untuk suatu produk dan menghilangkannya, di mana hitungannya tidak sama dengan jumlah parameter yang dikirimkan melalui formulir. Kueri luar mendapatkan detail produk untuk produk yang jumlahnya cocok.

Untuk ... dalam klausa in() Anda perlu memberikan daftar kata kunci yang dipisahkan koma, ', seperti:"'computer', 'apple'". Gunakan fungsi implode() dalam penggabungan php dan sztring untuk mendapatkan hasilnya.

Untuk ... dalam klausa have, ganti jumlah kata kunci dalam larik $_POST['keyword'] (Anda harus memeriksa kode apakah itu larik atau hanya satu nilai).

Namun, Anda harus mempertimbangkan dampak injeksi sql pada kode Anda.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara menonaktifkan indeks di innodb

  2. Memahami Pernyataan dan Parameter Pengikatan yang Disiapkan PDO

  3. Membuat laporan di java dengan JDBC dan mencoba mengonversi antara tanggal sql dan tanggal util Java

  4. Bagaimana menghubungkan ke MySQL dari baris perintah

  5. Kueri SQL untuk mendapatkan nilai rata-rata untuk periode waktu tertentu