Recherche mysql

Résolu
Dav_c Messages postés 196 Date d'inscription dimanche 25 janvier 2004 Statut Non membre Dernière intervention 31 mai 2024 - 15 janv. 2010 à 23:00
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 - 17 janv. 2010 à 18:29
Bonjour, j'ai dans ma db un champ contenant plusieur mot sous cette forme:
Salut;Bob;Ginette

exemple ;)


jaimerais connaitre la requette me permettant de chercher le nombre de fois que Bob a été enregistrer dans la db...

J'ai bien penser a appliquer la fonction split sur chaque entrer une par une, mais je crain qu'a la longue sa ne devienne un trop bourrin.
Quelqun a une idée?
Merci

18 réponses

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
16 janv. 2010 à 10:29
Salut,

Peut être qu'un simple
SELECT COUNT(nom) FROM ta_table WHERE nom LIKE '%bob%'

pourrait convenir, mais pour ça il faudrait en connaitre bien d'avantage sur la fonctionnalité exacte de ta table.
A vue de nez c'est une mauvaise idée si tu as par exemple un truc comme
Salut;Boby;Ginette

mais ce sera avec certitude un beau BORDEL!

Je ne suis pas d'accord
Et côté performance je parierai bien que c'est bien plus rapide qu'un traitement php.

Un simple truc comme ça par exemple :
SELECT COUNT(nom) 
FROM ta_table
WHERE nom REGEXP '(^|;)bob($|;)'


Par ailleurs il y a peut être une réflexion à mener sur la structure de tes tables qui t'amène dans le cas présent (et si j'ai bien compris) à mettre plusieurs données dans un même champ.


Cordialement,

Kohntark -
3
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
16 janv. 2010 à 05:29
Bonjour,

- Bon tu récupere en amont le champs de la table qui t'intéresse donc mysql_query() blabla....
- Et dans la boucle while,
<?php
$array = explode(";", $row[machintruc]);
$arraycount = array_count_values($array);
?>


- Après avoir finit le parcours de la BD :
<?php
foreach($arraycount as $value_search=> $stat)
{
  if ($value_search=='bob')
  {
    print 'Bob est afficher : '.$stat; 
   exit();
  }
}
?>


Bon c'est juste une idée...
______________________________________________________________________
0
Dav_c Messages postés 196 Date d'inscription dimanche 25 janvier 2004 Statut Non membre Dernière intervention 31 mai 2024
16 janv. 2010 à 07:54
Fonctionelle ces sure mais c'est pour un script de gestion de contrat asser important, sur le long terme, j'ai peur que lorsqu'il aura servit il ne ralentisse de façon drastique...

Il y a t'il une requete sql servant a cela?
0
pysco68 Messages postés 681 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 21 août 2014 8
16 janv. 2010 à 08:02
SELECT COUNT(nom) FROM ta_table WHERE nom = 'bob'


devrait faire l'affaire (de tête: tu pourrais aussi utiliser GROUP BY nom en fin de requête pour faire le listing de combien de chaque nom tu a.... le résultat devrait être de type INT/BIGINT)

J'espère cque c'est ça!
- Pysco68
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Dav_c Messages postés 196 Date d'inscription dimanche 25 janvier 2004 Statut Non membre Dernière intervention 31 mai 2024
16 janv. 2010 à 08:07
Comme sa, sa fait pas que chercher le mot bob?
Je veut dire cette requete ne trouvera pas bob dans Salut;bob;Ginette non?
0
pysco68 Messages postés 681 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 21 août 2014 8
16 janv. 2010 à 08:11
Possible faudrait essayer. J'ai pas d'environnement de développement sous la main. Mais théoriquement ça devrais retourner NULL


- Pysco68
0
pysco68 Messages postés 681 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 21 août 2014 8
16 janv. 2010 à 08:13
Ah merde je viens de te relire....

Je partais de l'avis que tu avais une table, qui avais une colonne "nom" et qu'il y avais plusieurs entrée contenant "bob" par exemple.

Clarifie une fois ta structure de données
- Pysco68
0
Dav_c Messages postés 196 Date d'inscription dimanche 25 janvier 2004 Statut Non membre Dernière intervention 31 mai 2024
16 janv. 2010 à 08:13
Je test demain mais je doute, anyway chu pas en état de coder maintenant ;)
0
Dav_c Messages postés 196 Date d'inscription dimanche 25 janvier 2004 Statut Non membre Dernière intervention 31 mai 2024
16 janv. 2010 à 08:17
A dsl, je croyais avoir été claire mais effectivement sa peut porter a confusion.

Donc j'ai le champ Nom et les ligne ressemble a sa:

Salut;Bob;Ginette
Salut;Ginette
Bob;Ginette
0
pysco68 Messages postés 681 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 21 août 2014 8
16 janv. 2010 à 08:25
J'ai bien peur que pour ce coup là la version qu'avais proposée phpAnonyme soit la plus facile... sinon tu peux t'amuser avec les Expressions Régulières dans MySQL, mais ce sera avec certitude un beau BORDEL!

http://dev.mysql.com/doc/refman/5.0/en/regexp.html si jamais tu est masoschiste (je le suis :P enfin pour ce coup là ;)


- Pysco68
0
pysco68 Messages postés 681 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 21 août 2014 8
16 janv. 2010 à 14:31
@ Kohntark: re :)

Ben enfait, admettons que nous avons par exemple: "bob;ginette;mark;bob" dans notre champs, ta requête ne retournera que '1' puisque tu ne traite pas les éventuelles récurrences (j'ai admis qu'il pouvait y en avoir)...

Il quasi nécessaire d'utiliser une procédure enregistrée. Enfin je crois :P
Si parcontre il n'y a qu'une seule occurrence du mot à chercher pas chaine, ta version marche très bien ;)


- Pysco68
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
16 janv. 2010 à 15:16
(j'ai admis qu'il pouvait y en avoir)...

Oui, c'est pour cela que j'attirais l'attention sur le fait d'en connaitre plus sur la fonctionnalité de la table, parce que pour l'heure on ne connait que très peu de choses et nous ne pouvons faire que des suppositions.
Pour éviter d'en faire trop je ne me suis basé que sur les exemples fournis.

D'ailleurs même ton exemple reste une extrapolation, peut être recherche t il le nombre de fois où Bob apparait dans chaque enregistrement(du style nombre de fois où Bob est intervenu dans un contrat, chaque enregistrement en représentant un)
C'est également une extrapolation

Bref, à toi Dav_c


Cordialement,


Kohntark -
0
Dav_c Messages postés 196 Date d'inscription dimanche 25 janvier 2004 Statut Non membre Dernière intervention 31 mai 2024
17 janv. 2010 à 02:50
"SELECT COUNT(Contrat_Employer_actif) FROM renox_contrats WHERE Contrat_Employer_actif LIKE '%;".$User.";%'"

Merci sa marche nikel, sa l'évite de devoir faire un boucle pour chaque contrat...
0
Dav_c Messages postés 196 Date d'inscription dimanche 25 janvier 2004 Statut Non membre Dernière intervention 31 mai 2024
17 janv. 2010 à 02:52
A oui j'allais oublier chaque nom devra être unique donc pas besoin de vérifié s'il apparait 2 fois dans une meme ligne.
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
17 janv. 2010 à 10:30
Je me répète mais fais très attention avec cette solution, elle ne fonctionnera pas correctement si tu as des noms qui contiennent la même chaîne de caractères :
bob / bobby
sylvain / sylvaine
dupont / dupontel
etc ...



Kohntark -
0
Dav_c Messages postés 196 Date d'inscription dimanche 25 janvier 2004 Statut Non membre Dernière intervention 31 mai 2024
17 janv. 2010 à 14:50
oui mais jai contourner le probleme en rajoutant un ; devant ma chaine et ma requete cherche ;bob; et non bob
0
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
17 janv. 2010 à 16:47
[quote=Tu]oui mais jai contourner le probleme en rajoutant un ; devant ma chaine et ma requete cherche ;bob; et non bob/quote
Ben en faite sa change pas grand chose...Tout t'es client ne s'appelleront pas bob, il y aura comme te l'a dit kohntark des dérivés de noms et ça sera un problème. Donc ;bob;bobby;.... il y a toujours bob dans le nom et il est compris dans les séparateurs...


______________________________________________________________________
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
17 janv. 2010 à 18:29
Au temps pour moi, je n'avais pas prêté attention au
LIKE '%;".$User.";%'"

Mais je suis rassuré, je crois bien que PhpAnonyme a loupé également

J'ai par contre toujours des doutes sur le fait que ta structure de DB soit bien construite.

Bonne continuation,


Kohntark -
0
Rejoignez-nous