IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

requete recherche dans champs table


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut requete recherche dans champs table
    bonjour à tous

    est ce possible ?

    soit une base avec 4 champs

    id - champ 1 - champ 2 - champ 3

    1 - chat - chien - oiseau
    2 - chat - rongeur - oiseau
    3 - chien - chien - chien
    4 - chien - chat - chien

    sur la recheche "chien" dans les champs d'avoir en réponse suivant le nombre de fois ou on a trouvé le mot dans chacune des 3 colonnes

    id 3 - 3
    id 4 - 2
    id 1 - 1
    id 2 - 0

    merci d'avance

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton kaj bonan nokton,
    Tout d'abord il ne faut pas mélanger base de données et table d'une part.
    D'autre part les champs sont dans les formulaires (ou à la campagne, dixit Cinéphil); les tables, elles, sont composées de lignes et de colonnes.

    S'il est évidemment possible de compter les apparitions de 'chien' dans chacune des trois colonnes
    Code MySQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT SUM(CASE WHEN col1="chien" THEN 1 ELSE 0 END) as tot1,
           SUM(CASE WHEN col2="chien" THEN 1 ELSE 0 END) as tot2,
           SUM(CASE WHEN col3="chien" THEN 1 ELSE 0 END) as tot3
    FROM latable
    on reste en droit de s'interroger sur la pertinence de la modélisation qui a conduit à cette table.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    merci - le code que je viens de tester est tout à fait correct et permet en effet de comptabiliser le mot chien dans chaque colonne pour l'ensemble des "id" mais...


    je précise ma question initiale ( pas claire sans doute )

    est ce possible de déterminer pour chaque id ( identifiant unique ) si le mot apparait dans 1, 2 ou les 3 colonnes d ou le résultat que je souhaite

    id - total
    3 - 3
    4 - 2
    1 - 1
    2 - 0

    vous l aurez sans doute compris je maitrise assez peu mysql bien que je l utilise souvent pour des requetes basiques - peut-etre que ce que je demande n'est tout simplement pas possible

  4. #4
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Cela reste possible
    Code MySQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT id,(CASE WHEN col1="chien" THEN 1 ELSE 0 END) +
           (CASE WHEN col2="chien" THEN 1 ELSE 0 END) +
           (CASE WHEN col3="chien" THEN 1 ELSE 0 END) AS total
    FROM latable
    ORDER BY total, id
    mes réserves sur la pertinence de la modélisation sous-jacente demeurent.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    c'est formidable, ça fonctionne à merveille

    est ce possible de ressortir les résultats de total supérieurs à 0

    SELECT id,(CASE WHEN col1="chien" THEN 1 ELSE 0 END) +
    (CASE WHEN col2="chien" THEN 1 ELSE 0 END) +
    (CASE WHEN col3="chien" THEN 1 ELSE 0 END) AS total
    FROM latable where total>0
    ORDER BY total, id

  6. #6
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    total n'est pas une colonne connue du SGBD au moment du filtrage avec WHERE.
    Soit tu remets la formule de calcul dans le WHERE, soit tu utilises une clause HAVING qui est censée être couplée avec une clause GROUP BY mais que MySQL accepte tout à fait très bien.
    Code MySQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WHERE ((CASE WHEN col1="chien" THEN 1 ELSE 0 END) +
           (CASE WHEN col2="chien" THEN 1 ELSE 0 END) +
           (CASE WHEN col3="chien" THEN 1 ELSE 0 END)) > 0
    ou
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  7. #7
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    désolé...j ai un bug dans les 2 cas du genre

    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE



    SELECT id, WHERE ((CASE WHEN col1="chien" THEN 1 ELSE 0 END) +
    (CASE WHEN col2="chien" THEN 1 ELSE 0 END) +
    (CASE WHEN col3="chien" THEN 1 ELSE 0 END)) > 0 AS total
    FROM latable ORDER BY total, id

    j ai essayé de mettre AS total a d'autres endroits sans succès ( sans c est pareil )

  8. #8
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Il faut tout de même resté cohérent avec la syntaxe SQL de base
    Code MySQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT id, (CASE WHEN col1="chien" THEN 1 ELSE 0 END) +
    (CASE WHEN col2="chien" THEN 1 ELSE 0 END) +
    (CASE WHEN col3="chien" THEN 1 ELSE 0 END) AS total
    WHERE ((CASE WHEN col1="chien" THEN 1 ELSE 0 END) +
    (CASE WHEN col2="chien" THEN 1 ELSE 0 END) +
    (CASE WHEN col3="chien" THEN 1 ELSE 0 END)) > 0
    FROM latable 
    ORDER BY total, id
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  9. #9
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    j ai malheureusement le même rejet

    j ai fais un copié en changeant col1 col2 col3 et latable avec mes données et j ai toujours ce même rejet :
    1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE ((CASE WHEN .....

  10. #10
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    ok après de multiples tentatives j ai remonté FROM latable comme ceci

    SELECT id, (CASE WHEN col1="chien" THEN 1 ELSE 0 END) +
    (CASE WHEN col2="chien" THEN 1 ELSE 0 END) +
    (CASE WHEN col3="chien" THEN 1 ELSE 0 END) AS total
    FROM latable
    WHERE ((CASE WHEN col1="chien" THEN 1 ELSE 0 END) +
    (CASE WHEN col2="chien" THEN 1 ELSE 0 END) +
    (CASE WHEN col3="chien" THEN 1 ELSE 0 END)) > 0
    ORDER BY total, id
    et ça fonctionne

    un grand merci donc pour le temps passé - j'ai pris un vrai cours car j'ignorai
    bien qu'il était possible de faire des choses comme celles-ci avec mysql

  11. #11
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Oui, au temps pour mes vieux neurones ramollis.
    Ah les affres du copier-coller !
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

Discussions similaires

  1. [MySQL] Recherche dans 2 tables MySql dans la même requete
    Par poitierjohan dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/03/2011, 19h59
  2. Recherche dans une table
    Par Fredo67 dans le forum Access
    Réponses: 2
    Dernier message: 28/02/2006, 17h21
  3. Enregister doc dans champ table mysql
    Par kakashi embedded dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 16/01/2006, 19h32
  4. Requete insertion dans une table sous delphi?
    Par EssaiEncore dans le forum Bases de données
    Réponses: 5
    Dernier message: 09/01/2006, 15h12
  5. recherche dans une table Access en ASP
    Par D-D dans le forum ASP
    Réponses: 3
    Dernier message: 09/06/2004, 10h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo