en utilisant une JOINTURE GAUCHE et COMME mysql
j'ai un problème dans la requête mysql.
c'est de cette façon mes tables ressemble:
mysql> select username, specialty from users;
+----------+------------------+
| username | specialty |
+----------+------------------+
| JinkX | php, html, mysql |
| test1 | html |
+----------+------------------+
mysql> select name, tags from tasks;
+----------------+------+
| name | tags |
+----------------+------+
| fix front page | html |
+----------------+------+
et quand j'essaie de faire la requête suivante, il ne fonctionne que si la spécialité est exactement égale au tags. mais je veux qu'il fonctionne sur les deux
mysql> select tasks.name from users left join tasks on tasks.tags LIKE users.specialty where users.username = 'test1';
+----------------+
| name |
+----------------+
| fix front page |
+----------------+
mysql> select tasks.name from users left join tasks on tasks.tags LIKE users.specialty where users.username = 'JinkX';
+------+
| name |
+------+
| NULL |
+------+
Êtes-vous ouvert à l'évolution (normalisation) le schéma?
assurez-vous quoi ur solution?
Selon la réponse de Joe (bien que je serais probablement avoir une
c'est une très bonne idée, mal de travail en ce moment.
assurez-vous quoi ur solution?
Selon la réponse de Joe (bien que je serais probablement avoir une
tags
table avec un nombre entier de clé de substitution). Ceci permettra à l'index pour être utilisé pour faire des requêtes plus efficace (plutôt que d'avoir à scanner chaque enregistrement de l'utilisateur)c'est une très bonne idée, mal de travail en ce moment.
OriginalL'auteur saadlulu | 2011-02-08
Vous devez vous connecter pour publier un commentaire.
Bien, vous avez découvert la douleur de l'épargne des valeurs indépendantes en une chaîne délimitée par des virgules.
Si vous le pouvez, je voudrais vous suggérer de modifier la structure de données, d'obtenir la spécialité de la colonne de la table utilisateur, et de créer un nouveau
user_specialty
tableau qui aurait les clés étrangères pourusers.username
ettasks.tags
.OriginalL'auteur Joe Stefanelli
Vous êtes en train de faire
like
mal.Essayer cette requête:
Ce n'est pas le meilleur façon, mais il devrait fonctionner
EDIT: selon les commentaires il y a un autre moyen qui devrait être mieux
À l'aide de REGEXP:
Pas recommandé. Cela pourrait créer une fausse correspondance si un tag est un sous-ensemble de l'autre.
OriginalL'auteur Keeper
Vous avez besoin de la
find_in_set
fonction. Mettez ceci dans votrewhere
clause:(Référence)
Ce format n'est ce à quoi s'attendre? De la documentation, il semble comme il voudrait que les différentes cordes à être délimité?
'php', 'html', 'mysql'
FIND_IN_SET ne s'attend pas à des chaînes délimitées. Il semble que pour les virgules. Vous ne savez pas si il retranche des espaces ou pas; besoin de vérifier.
OriginalL'auteur awm