Kueri Mysqli: Cari kedua kolom untuk nilai atau gabungan

Saya memperbarui situs web quadcopter saya dan meningkatkan sistem pencarian saya. Saat ini pengguna hanya dapat mencari berdasarkan model quadcopter. Saya sekarang sedikit memperbaikinya sehingga pengguna dapat mencari merek atau modelnya.

Saya ingin pengguna dapat mengetikkan merek dan model ke dalam kolom pencarian, dan mengizinkan kedua kata tersebut diperiksa di antara salah satu catatan di DB.

Pada dasarnya, katakanlah merek quadcopter adalah "DJI" dan modelnya adalah "Phantom", dalam database saya satu akan disimpan di bawah merek 'kolom' dan yang lainnya di bawah 'model'. Saya ingin pengguna dapat mengetik 'dji phantom' dan modelnya muncul.

Jika ini tidak memungkinkan, apakah ada cara agar hasilnya terlihat meskipun tidak tepat? Dengan kolom pencarian saya saat ini Anda dapat mencari quadcopter asalkan berisi seluruh bagian string. Misalnya, 'plant' akan menampilkan "DJI Phantom" begitu pula 'anton'

Inilah pertanyaan saya:

$search = $_GET['search'];

$search_list = mysqli_query($conn,"SELECT * FROM quads WHERE model LIKE '%$search%' OR brand LIKE '%$search%'");

PS (Saya tahu ini rentan terhadap suntikan; ini yang saya perbaiki minggu ini, terima kasih).


person Bradley    schedule 14.11.2016    source sumber
comment
@JoseManuelAbarcaRodríguez Ya, jika hanya merek yang dimasukkan, maka quadcopter akan muncul, sama seperti jika pengguna hanya memasukkan model. Jika pengguna memasukkan merek dan model seperti 'dji phantom' maka tidak ditampilkan   -  person Bradley    schedule 14.11.2016
comment
Bagaimana Anda tahu bahwa pengguna hanya memasukkan merek dan bukan hanya modelnya?   -  person Jose Manuel Abarca Rodríguez    schedule 14.11.2016
comment
Saat saya coba sendiri di websitenya, kalau saya masuk DJI, quadcopternya muncul tapi kalau saya masukkan merek dan modelnya tidak muncul.   -  person Bradley    schedule 14.11.2016
comment
DJI akan mencocokkan merek sedangkan Phantom akan mencocokkan model tetapi DJI Phantom tidak akan mencocokkan model atau merek. Bisakah Anda membagi teks pencarian dan kemudian mencoba melihat apakah ada kecocokan di DB?   -  person Maximus2012    schedule 14.11.2016
comment
@ Maximus2012 Inilah yang ingin saya lakukan, Anda telah menjelaskannya sesuai kebutuhan saya. Saya telah menghabiskan sekitar satu jam untuk mencari ini namun tidak berhasil   -  person Bradley    schedule 14.11.2016
comment
Coba gunakan CONCAT untuk menambahkan kondisi pencarian lain selain yang sudah Anda miliki? stackoverflow.com/questions/303679/ Meskipun berhasil, ini hanya akan berfungsi untuk kasus tertentu ketika pengguna memasukkan sesuatu seperti DJI Phantom tetapi itu akan menjadi awal yang baik.   -  person Maximus2012    schedule 14.11.2016
comment
@Maximus2012 Jujur saja, sempurna, ketika mereka masuk ke DJI Phantom, ini sekarang terlihat. Satu hal lagi yang lebih meningkatkannya, apakah mungkin untuk menampilkan DJI Phantom, katakanlah jika ada kesalahan ejaan yang dimasukkan seperti DJI Phontom?   -  person Bradley    schedule 14.11.2016
comment
Yang itu rumit. MySQL tidak memiliki fitur bawaan seperti itu sehingga Anda mungkin harus menulis algoritme Anda sendiri atau Anda mungkin ingin melihat Lucene atau Elasticsearch untuk melihat apakah mereka memiliki fitur tersebut. elastic.co/guide/en/elasticsearch/ referensi/saat ini/ quora.com/   -  person Maximus2012    schedule 14.11.2016
comment
Mirip dengan CONCAT tetapi melakukan pekerjaan menyisipkan daripada memilih adalah membuat kolom search_string dengan merek dan model dan mungkin nomor seri. Terkadang saya juga melihat sebagian pertandingan yang diantisipasi ditambahkan. Kemudian Anda juga bisa explode(' ', $search) jika ingin menguji token di string pencarian secara mandiri.   -  person Jerry    schedule 14.11.2016