2010-03-23 9 views
0

La configuration C'est plus ou moins une question complémentaire à quelque chose que j'avais précédemment posté concernant les valeurs séparées par des virgules (exploser, imploser). Voici le scénario qui m'a bluffé ces derniers jours comme je suis un noob - désolé pour le poste long.Valeurs séparées par des virgules et LIKE php/mysql Problèmes

Je passe une variable via l'URL (index.php? Id = variable), je puis vérifier la base de données pour trouver les lignes contenant cette variable en utilisant

SELECT * FROM table WHERE column LIKE '%$variable%' 

J'utilise les jokers parce que les résultats sont une valeur séparée par des virgules, la variable apparaissant plusieurs fois dans la base de données. Donc, si nous assignions-- disons des écoles à des émissions de télévision populaires .. ma base de données est configurée pour que l'utilisateur puisse assigner plus d'une école à l'émission de télévision. C'EST À DIRE.

South Park ->fsu, NYU, mit

Archer ->harvard, NYU

index.php id = NYU afficherait Sourth Parc & Archer.

Le problème Parce que j'utilise Like '%variable%'

Si je donne les résultats suivants: South Park ->uark Archer ->ua

index.php = Ua Au lieu de montrer juste Archer, Southpark montrerait aussi.

Ce qui est logique en raison des caractères génériques ... mais quelqu'un peut-il penser à un moyen de le faire atteindre les résultats que je veux? .. Y at-il un moyen d'obtenir des résultats plus précis? suis complètement piétiné et j'apprécierai toute aide.

+0

Je ne pense pas que ce soit la meilleure façon d'utiliser une base de données. Si vous avez mis en place une relation correcte et pas seulement en utilisant la table comme stockage, c'est un problème trivial à résoudre. – Extrakun

Répondre

2

Une meilleure option consiste à créer deux autres tables. Une table est celle que vous avez déjà 'tv_shows' et la deuxième table est la table 'tags' et la troisième table est la table de connexion.

Voici un exemple:

CREATE TABLE tags(id INT, tag VARCHAR(200)); 
CREATE TABLE tv_tags(show_id INT, tag_id INT); 

SELECT FROM tv_shows,tv_tags WHERE tv_shows.id=tv_tags.show_id AND tag_id IN (SELECT id FROM tags WHERE tag LIKE 'tag'); 
+0

Merci, je dois apprendre beaucoup plus sur les relations de table. – Jay

1

Avez-vous essayé l'opérateur REGEXP? STH comme

SELECT * FROM table WHERE column REGEXP('(^|,)%variable%(,|$)') 

il peut être légèrement différente si vous avez des espaces entre vos tags, mais l'idée est ici

+1

Merci beaucoup, cela m'a mis dans le bon chemin .. J'ai fini par utiliser quelque chose comme ceci: REGEXP '[[: <:]] ". $ Variable." [[:>:]]' – Jay

Questions connexes