Saya mencoba membuat fungsi pencarian untuk situs web saya. Saya memiliki tabel utama yang disebut 'rilis' yang berisi semua halaman utama untuk mencari. Saya memiliki tabel kedua bernama Releasing_Index yang berisi kata kunci untuk setiap halaman.

Contoh:

Rilis:

# releases_id, releases_title
'10001', 'Scarlet Witch'
'10002', 'Vision'

Releasing_Index:

# index_id, index_releaseId, index_value
'1', '10001', 'Scarlet Witch'
'2', '10001', 'Television'
'3', '10001', 'WandaVision'
'4', '10002', 'Vision'
'5', '10002', 'Television'
'6', '10002', 'WandaVision'

Saya berjuang untuk membuat kueri SQL yang dapat mengembalikan hasil yang benar. Misalnya, jika di situs web saya mencari 'Scarlet Witch' Saya ingin mengembalikan index_ReleaseID 10001. Saya juga ingin mengembalikan ini jika saya mencari 'Scarlet Waitvision'.

Awalnya saya mencoba melakukan ini dengan sesuatu seperti di bawah ini, tetapi masalahnya adalah bahwa itu mencari baris yang berisi seluruh permintaan pencarian daripada Release ID's yang cocok dengan semua istilah kueri.

WHERE index_value LIKE '%scarlet%' AND index_value LIKE '%witch%' AND index_value LIKE '%wandavision%'

Adakah yang bisa menyarankan apa yang dilakukan dengan cara terbaik untuk melakukan ini? Saya melakukan ini di PHP dengan PDO / MySQL

1
Josh 5 April 2021, 00:52

2 jawaban

Jawaban Terbaik

Ini adalah versi yang akan saya gunakan untuk mencapai ini:

     SELECT index_releaseId, GROUP_CONCAT(index_value) as idx_values
       FROM releases_index
   GROUP BY index_releaseId
     HAVING idx_values LIKE '%scarlet%'
        AND idx_values LIKE '%witch%'
        AND idx_values LIKE '%wandavision%'

Catatan Sisi: Group_concat adalah fungsi spesifik vendor dan hanya tersedia di MySQL / MariaDB

0
jumper85 5 April 2021, 15:10

Saat Anda mencari setiap kata pencarian yang harus valid

CREATE TABLE table1 (
  `index_id` VARCHAR(3),
  `index_releaseId` VARCHAR(7),
  `index_value` VARCHAR(15)
);

INSERT INTO table1
  (`index_id`, `index_releaseId`, `index_value`)
VALUES
  ('1', '10001', 'Scarlet Witch'),
  ('2', '10001', 'Television'),
  ('3', '10001', 'WandaVision'),
  ('4', '10002', 'Vision'),
  ('5', '10002', 'Television'),
  ('6', '10002', 'WandaVision');
SELECT DISTINCT `index_releaseId`
 FROM table1 t1
 WHERE EXISTS(SELECT 1 FROM table1 WHERE `index_releaseId` = t1.`index_releaseId` AND  `index_value` LIKE '%Scarlet%') 
AND EXISTS(SELECT 1 FROM table1 WHERE `index_releaseId` = t1.`index_releaseId` AND  `index_value` LIKE '%Witch%') 
AND EXISTS(SELECT 1 FROM table1 WHERE  `index_releaseId` = t1.`index_releaseId` AND  `index_value` LIKE '%WandaVision%')
| index_releaseId |
| :-------------- |
| 10001           |

db & lt; & gt; biola

nbk 5 April 2021, 14:34