2011-04-13 4 views
2

J'ai une table MySQL aménagé comme ceci:recherche de texte dans plusieurs champs MySQL

ID | Artist | Title 

qui contient des informations de chanson obtenues à partir des balises ID3 MP3.

Maintenant, j'aimerais pouvoir lancer une recherche à ce sujet, mais les données entrantes pourraient être dans une variété de formats. Je suis sûr que vous savez tous comment les tags ID3 peuvent finir après que quelques personnes les aient eues.

J'ai la requête suivante que j'ai essayée, mais en la regardant maintenant, je comprends complètement pourquoi elle ne ramène pas un jeu de résultats. Je suis fraîche d'idées.

SELECT CONCAT(artist, ' ',title) as trackname 
FROM sound_tracklist 
WHERE CONCAT(artist,' ',title) LIKE '%[JunkTags]Artist - Title[More Junk - www.junkwebsite.com]%' 

J'apprécierais n'importe quelle entrée/direction sur ceci.

Merci

+0

Vous aurez besoin d'un mécanisme de recherche plus robuste que 'LIKE '% string%''. Par exemple, essayez de diviser votre terme de recherche en mots et d'exécuter des recherches sur chaque mot. – Dimitry

Répondre

10

Si vous êtes dans les tables de type MyISAM, essayez d'utiliser un index FULLTEXT:

ALTER TABLE sound_tracklist ADD FULLTEXT INDEX (artist, title); 

alors vous pouvez faire

SELECT artist, title FROM sound_tracklist WHERE MATCH (artist, title) AGAINST ('bach brandenburg concerto') 

il ne serait pas attraper les fautes d'orthographe (» konshertoe ", n'importe qui?), mais il chercherait vos claviers spécifiés dans tous les champs de l'index, et les attraperait dans n'importe quel ordre.

+0

Merci beaucoup Marc, ça a bien fonctionné :) – Dave

+2

'claviers'? Sheesh ... J'ai vraiment besoin de dormir plus. –

+1

lol .. Je pensais qu'il était destiné comme un jeu de mots plein texte;) – Dave