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 :

Supprimer les enfants et toujours afficher les parents avec PHP et SQL


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2021
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Novembre 2021
    Messages : 10
    Par défaut Supprimer les enfants et toujours afficher les parents avec PHP et SQL
    J'essaie de concevoir une page de liste de souhaits mais contrairement à la page de liste de souhaits traditionnelle que nous avions l'habitude de voir, j'ai décidé d'en concevoir une qui contient des éléments de souhait, afin qu'un utilisateur puisse créer quelque chose comme un dossier de liste de souhaits puis décider d'ajouter ses éléments de souhait dans elle ou en eux. J'ai deux tables "Wishlist" et "Wishitems". Le problème maintenant, je pense, devrait provenir de ma requête, une liste de souhaits ne s'affiche pas si elle n'a pas d'éléments associés dans la table "wishitems" dont je ne veux pas. Je veux que les listes de souhaits s'affichent même si elles ne contiennent aucun élément. Quelqu'un peut-il m'aider s'il-vous-plaît?




    Code : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    /**
     * Get Wishlists information by $userId.
     *
     * @param int $userId user session Id.
     * @return array Result of fetch.
     */
    function getWishlist($userId): array
    {
        try {
            $db = createConnection();
            $sql = 'SELECT * FROM wishlist w
                    LEFT JOIN wishitems wi ON wi.wishlistID = w.wishlistID
                    LEFT JOIN products p ON wi.product_id = p.product_id
                    LEFT JOIN images i ON p.product_id = i.product_id
                    WHERE wi.user_id = :userId AND w.status = "1" AND imgPrimary = 1
                    AND i.imgPath LIKE "%-tn%" AND wi.status = "1"
                    ORDER BY w.wishlistID, w.date_created, wi.wishitemID DESC';            
            $stmt = $db->prepare($sql);
            $stmt->bindValue(':userId', $userId, PDO::PARAM_INT);
            $stmt->execute();
            $wishlists = $stmt->fetchAll();
            $stmt->closeCursor();
            return $wishlists;
        } catch (PDOException $e) {
            exit($e->getMessage()) ;
            return [];
        }
    }

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 325
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 325
    Billets dans le blog
    17
    Par défaut
    Tu as utilisé des LEFT OUTER JOIN, c'est un bon début.

    Maintenant il faut garder à l'esprit que toutes les valeurs des tables qui n'ont pas d'enregistrement vont être NULL, les critères de ton WHERE ne seront donc jamais respectés.

    => Il faut mettre ces critères non pas dans le WHERE mais dans le ON

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 602
    Billets dans le blog
    10
    Par défaut
    Et également, il ne faut jamais utiliser select *.
    Ici d'autant moins que la requête utilise 4 tables jointes, on a donc a minima toutes les colonnes de jointure présentes plusieurs fois, ce qui, ajouté aux autres colonnes dont le traitement n'a pas besoin, charge inutilement le réseau au détriment des traitements concurrents.

    De plus, select * est instable : toute modification de l'une des tables de la requête en modifiera le résultat.

Discussions similaires

  1. [DOM] IE supprime les "\n " avec innerHTML
    Par jld33 dans le forum Général JavaScript
    Réponses: 25
    Dernier message: 28/04/2008, 12h03
  2. Réponses: 6
    Dernier message: 12/02/2008, 20h02
  3. Supprimer les doublons avec ou sans tri préalable
    Par ouskel'n'or dans le forum Contribuez
    Réponses: 0
    Dernier message: 19/12/2007, 20h24
  4. Supprimer les doublons avec order by non affiché
    Par DidRocks dans le forum Oracle
    Réponses: 1
    Dernier message: 19/09/2007, 09h42
  5. [SQL] Supprimer les lignes d'une table sql
    Par radhwene dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 28/06/2007, 11h48

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