2011-11-16 2 views
0

Comment puis-je sélectionner l'étiquette avec précision dans la colonne d'étiquette avec la liste d'étiquettes?Comment sélectionner le tag avec précision dans la colonne de tag avec la liste de tag?

Par exemple ci-dessous est le tableau créé à l'aide d'une requête, mais je veux affiner ma recherche,

page_id   tags 
1    tile-1,tile-12,tile-10 
2    tile-1,tile-10 
3    tile-12,tile-10 
4    tile-15,tile-16 

le résultat que je suis après est les pages avec tile-1 seulement,

page_id   tags 
1    tile-1,tile-12,tile-10 
2    tile-1,tile-10 

Mais la requête sur laquelle je travaille ci-dessous renvoie tous, y compris, tile-12, tile-10, etc.

SELECT* 
FROM (...) AS k 
WHERE k.tags LIKE '%tile-1%' 

Puis-je ne pas utiliser LIKE?

+0

Comme quelqu'un a répondu ci-dessous, votre schéma est vraiment mauvais. Ce n'est pas totalement normalisé. Il est préférable de le changer maintenant - si vous allez plus loin avec le projet, le schéma comme ceci deviendra une douleur dans le $$ pour travailler avec. –

Répondre

1

Je propose de changer le schéma à page_id, étiquette. afin que vos données devraient ressembler à ceci

1   tile-1 
1   tile-12 
1   tile-10 
2   tile-1 
2   tile-10 
3   tile-12 
3   tile-10 
4   tile-15 
4   tile-16 

Ensuite, vous pouvez faire tout cela avec une simple requête,

SELECT * FROM table WHERE tag = 'title-1'; 

De cette façon, vous n'avez pas à chercher dans la table (scans de table) - qui deviendra un problème une fois que la table aura plus de lignes (solution évolutive). Deuxièmement, vous pouvez utiliser l'index sur la colonne de l'étiquette, pour accélérer les recherches.

+0

Merci pour cette réponse! :-) – laukok

0

Puisque vous utilisez une virgule comme séparateur, votre LIKE -Déclaration devrait inclure la virgule:

SELECT * FROM table WHERE tags LIKE '%title-1,%'; 
+0

oh c'est une solution rapide! Merci! :-) – laukok

+0

oh non attends. que se passe-t-il comme 'tile-10, tile-1' ou' tile-1'? – laukok

+0

Hm, désolé si j'ai mal interprété votre question. Si la colonne tags-only doit contenir 'title-1', alors il semblerait que vous utilisiez' = 'insted of' LIKE' ... Dans le tableau ci-dessus, vous ne trouverez pas de correspondance, c'est ce que vous êtes après? – Fluff