Ben bir arama / etiket sistemi üzerinde çalışıyorum. Ben yazdım benim özgün sorgu ben 'unvanını depolama edildi' açıklaması için 'oldu ve bir virgül benim yazı / video tablosunda' etiketler 'sütununu ayrıldı. O zamandan beri benim etiketleri normalleştirilmesi avantajı fark var. Ben şimdi uğraşmak üç tablo var ...
tbl_Articles
- article_id
- başlık
- tanım
- içerik
tbl_tag_index
- tag_id (vekil birincil id)
- tag_type (equals 1 for tbl_Articles, 2 for tbl_videos)
- tag_word_id (tablo feryat bakınız)
- tag_target_id (article_id/video_id - depends on tag_type)
tbl_tag_word
- tag_word_id
- tag_word (nihayet gerçek etiketi)
Bu sorgu, tek sorun onları farklı satır döndürür ... etiketleri döndürür. Benim arama sorgusu çalışabilir böylece ben aynı satırda gruplandırılmış olması sonuçlarını gerekir sanırım
SELECT *
FROM `tbl_articles` A
JOIN `tag_index` I ON A.article_id = I.tag_target_id
JOIN tag_word W ON I.tag_word_id = W.tag_word_id
WHERE I.tag_type_id = 1
İşte benim eski arama sorgu
SELECT *,
(
(CASE WHEN `tanım` LIKE '%hotel%' THEN 1 ELSE 0 END) +
(CASE WHEN `tanım` LIKE '%london%' THEN 1 ELSE 0 END) +
(CASE WHEN `tanım` LIKE '%lazy%' THEN 1 ELSE 0 END) +
(CASE WHEN `tanım` LIKE '%dog%' THEN 1 ELSE 0 END) +
(CASE WHEN `başlık` LIKE '%hotel%' THEN 1 ELSE 0 END) +
(CASE WHEN `başlık` LIKE '%london%' THEN 1 ELSE 0 END) +
(CASE WHEN `başlık` LIKE '%lazy%' THEN 1 ELSE 0 END) +
(CASE WHEN `başlık` LIKE '%dog%' THEN 1 ELSE 0 END) +
(CASE WHEN `tags` LIKE '%hotel%' THEN 1 ELSE 0 END) +
(CASE WHEN `tags` LIKE '%london%' THEN 1 ELSE 0 END) +
(CASE WHEN `tags` LIKE '%lazy%' THEN 1 ELSE 0 END) +
(CASE WHEN `tags` LIKE '%dog%' THEN 1 ELSE 0 END)
) AS relevance
FROM `tbl_Articles`
WHERE `tanım` LIKE '%hotel%'
OR `tanım` LIKE '%london%'
OR `tanım` LIKE '%lazy%'
OR `tanım` LIKE '%dog%'
OR `başlık` LIKE '%hotel%'
OR `başlık` LIKE '%london%'
OR `başlık` LIKE '%lazy%'
OR `başlık` LIKE '%dog%'
OR `tags` LIKE '%hotel%'
OR `tags` LIKE '%london%'
OR `tags` LIKE '%lazy%'
OR `tags` LIKE '%dog%'
ORDER BY relevance DESC
LIMIT 0 , 10;