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

PHP & Base de données Discussion :

Fusion de tables, erreur table vide [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Inscrit en
    Juin 2013
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 37
    Par défaut Fusion de tables, erreur table vide
    Bonjour,

    Je suis conscient que le titre n'est pas très explicite ^^.
    Néanmoins je vais essayer de mieux m'expliquer.

    J'ai un soucis avec une requête sql que voici :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT me.id as id,me.nom as nom,me.prenom as prenom,me.avatar as avatar FROM mc__amis AS am, mc__membres AS me WHERE NOT EXISTS (SELECT id FROM mc__amis WHERE (id_demandeur = '2' AND id_receveur=me.id) OR (id_demandeur=me.id AND id_receveur = '2')) AND me.actif = '1' AND me.nom LIKE '%dupond'

    En claire je recherche dans la base le nom d'un membre, mais que si il n'est pas déja enregistré dans la table mc__amis.

    Le soucis est que si j'ai déjà un enregistrement dans la table mc_amis tous fonctionne correctement, par contre si la table mc_amis est vierge (donc vide) je n'ai aucun résultat qui s'affiche.

    ma question est : es ce qu'il y a un moyen de contourner ceci ou va t'il falloir que je vérifie avant si ma table est vide ?

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 45
    Par défaut
    Bonjour,

    Heu je commence à avoir un peu mal au crâne en cette fin de journée mais quelque chose comme ceci ne répondrait t'il pas à ta question ?

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    SELECT 
    DISTINCT 
    	id,
    	nom,
    	prenom,
    	avatar 
    FROM 
    	mc__membres
    WHERE 
    	actif = '1'
    AND 
    	nom 
    LIKE 
    	'%dupond'
    AND 
    	id NOT IN (SELECT DISTINCT id FROM mc__amis WHERE id_demandeur = '2' OR id_receveur = '2')

    PS : au passage, des entiers il n'y a pas besoin de les mettre entre quote - si tant est que id_receveur et id_demandeur soient bien des entiers. "actif" est un bool j'imagine, mais c'est pareil, pas besoin de quote non plus.

  3. #3
    Membre averti
    Inscrit en
    Juin 2013
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 37
    Par défaut
    Merci de ta réponse

    Mais ceci ne change rien aucun affichage

    Concernant les quotes a la base les valeur ne sont pas des entiers

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 45
    Par défaut
    Ok,

    Et en faisant :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    SELECT 
    DISTINCT 
    	id,
    	nom,
    	prenom,
    	avatar 
    FROM 
    	mc__membres
    WHERE 
    	actif = '1'
    AND 
    	nom 
    LIKE 
    	'%dupond'
    AND 
    	id NOT IN (SELECT IF(id, id, 0) id FROM mc__amis WHERE id_demandeur = '2' OR id_receveur = '2')

    ?

  5. #5
    Membre averti
    Inscrit en
    Juin 2013
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 37
    Par défaut
    Il ne m'affiche qu'un seul résultat sachant qu'il devrait m'en afficher 4 au totale

    voici ma requête :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    SELECT DISTINCT id, nom, prenom, avatar
    FROM mc__membres
    WHERE actif =  1
    AND nom LIKE  '%dup'
    AND id NOT 
    IN (
    	SELECT IF(id, id, 0) id
        FROM mc__amis
        WHERE (
        	id_demandeur =  '#A0-2'
            AND id_receveur = id
        ) OR (
        	id_demandeur = id
            AND id_receveur =  '#A0-2'
        )
    )
    LIMIT 0 , 30

    D’ailleurs ce qui est bizarre c'est que même en effectuant cette requête sa me retourne qu'un seul enregistrement:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT id, nom, prenom, avatar
    FROM mc__membres
    WHERE actif =  1
    AND nom LIKE  '%dup'
    LIMIT 0 , 30

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 45
    Par défaut
    Ah et bien c'est toujours un de mieux alors

    Sur les 3 qui manque, il n'y en a pas un qui a l'id 0 au moins ?

    Ensuite, j'ai du mal à suivre ce que tu souhaites faire ici :

    id_demandeur = '#A0-2'
    AND id_receveur = id

    ainsi qu'ici :

    id_demandeur = id
    AND id_receveur = '#A0-2'

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 45
    Par défaut
    Citation Envoyé par DevLqncer Voir le message
    D’ailleurs ce qui est bizarre c'est que même en effectuant cette requête sa me retourne qu'un seul enregistrement:
    Ah, je n'osais pas demander, mais du coup je te laisse chercher un peu alors

    PS : le IF dans le select imbriqué est valable aussi pour ta toute première requête.... sauf qu'il me semble qu'elle doit être plus gourmande que celle que je t'ai proposé

  8. #8
    Membre averti
    Inscrit en
    Juin 2013
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 37
    Par défaut
    C'est simple enfaîte exemple id_demandeur peut contenir aussi l'id du receveur et vice versa ^^

    Concernant mon ancienne requête en effet elle est plus gourmande du coup je garde la tienne ^^

    Mais enfaîte je suis un boulet, va falloir que j'arrete pour ce soir lol

    le soucis vien simplement d'un mauvais placement de la recherche enfaite je lui demandé de trouvé une cohérence en fin de chaine alors que c'été au début

    %dup = pas bon
    dup% = bon

    Merci de ton aide

  9. #9
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 45
    Par défaut
    arf lol en plus je l'avais capté que le % était en début de chaine, je n'ai pas plus tilté dessus car tu semblais dire : "s'il n'y a rien dans la table mc_amis, ça ne fonctionne pas mais sinon ça fonctionne". A partir de ce constat, pour moi, ça devait fonctionner.

    Ensuite, si ta structure est 'jean dupont' '%dupont' est bon, si c'est 'dupont jean' effectivement le % ne se place plus au même endroit ^^

    Donc le if résolvait ton problème quelque soit la requête ? (ou c'était vraiment que le '%' mal placé) Oui je pense que c'est mieux d'utiliser la requête NOT IN dans ton cas. Pose le if dans les 2, fait un bench, je pense que tu auras un gain sympa si ta base contient (contiendra) de très nombreux enregistrements.

    Topic résolu :p

  10. #10
    Membre averti
    Inscrit en
    Juin 2013
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 37
    Par défaut
    Exact ^^

    Mais bon c'est la fin de journée lol

    Sinon j'ai conservé ta requête qui demande beaucoup moin de ressource bon je l'ai quand même modifier car sinon la condition ne fonctionner pas voici ce que sa donne:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT DISTINCT id, nom, prenom, avatar
    FROM mc__membres AS me
    WHERE actif =  1
    AND NOT EXISTS (
    	SELECT DISTINCT id 
            FROM mc__amis
            WHERE (
        	    id_demandeur =  '#A0-2'
                AND id_receveur = me.id
            ) OR (
        	    id_demandeur = me.id
                AND id_receveur =  '#A0-2'
            )
    )
    AND nom LIKE  'dup%'

  11. #11
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 45
    Par défaut
    Bonjour,

    Hhmm bien à la masse hier soir.

    Le NOT IN ne correspond pas du tout à ce cas, en tout cas pas pour des valeurs null. Ma bidouille avec le IF sorti de nulle part également...

    Détaillé ici :

    http://asktom.oracle.com/pls/asktom/f?p=100:11:0::NO:11_QUESTION_ID:442029737684

    Voilà, pour remettre les choses à leur place.

    Cdlt,

  12. #12
    Membre averti
    Inscrit en
    Juin 2013
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 37
    Par défaut
    Bonjour,

    Exact mais bon t'inquiète pas j'en ais pas tenu compte mais tu ma aidé en restructurant ma requête et par ce fait sa ma fait prendre conscience de mon erreur dans la requête

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD17] Table dans table dans table je pense ?!
    Par franck34matlab dans le forum WinDev
    Réponses: 8
    Dernier message: 08/07/2014, 15h06
  2. alter table (erreur 150)
    Par King_T dans le forum Requêtes
    Réponses: 3
    Dernier message: 21/05/2006, 21h11
  3. Importation avec generation de table erreur
    Par uloaccess dans le forum Access
    Réponses: 7
    Dernier message: 28/11/2005, 19h32
  4. [XSL-FO] Table avec cellule vide
    Par JustAGphy dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 12/05/2004, 15h11
  5. Fusion de lignes de tables en éliminant les redondances
    Par MinsK dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 22/04/2004, 10h21

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