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 :

Having 'all' ?


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé

    Homme Profil pro
    Developpeur web
    Inscrit en
    Septembre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developpeur web
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 225
    Par défaut Having 'all' ?
    Bonjour, (et bonne année)

    Je cherche à faire une requête assez simple du style :

    "obtenir un exemplaire disponible d'un livre" dans le cadre d'une location de livres"

    => Obtenir tous les exemplaires de livre en tenant compte du fait de l'historique des commandes, les commandes ayant le status 2 indiquent que l'exemplaire est rentré (et donc disponible), un autre status signifie que l'exemplaire n'est pas disponible.

    J'ai donc une requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $sql = 'SELECT copy.id_copy, copy.id_book, sendingstatus
    			FROM copy 
    			LEFT JOIN command ON copy.id_copy = command.id_copy 
    			WHERE copy.id_book = iddulivre
    			GROUP BY copy.id_copy
    			HAVING TOUS sendingstatus=2 Or TOUS sendingstatus is null
    			';
    voilà donc en fait je connais pas la façon de dire en sql pour la clause having, "tous les champs = unevaleur"..

    Merci

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Si tu mets une clause WHERE ou un HAVING cela s'applique deja a toutes les lignes.

    Si tu parles de toutes les colonnes, je ne vois pas ce que tu veux faire.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Moi non plus je comprends pas tout mais généralement quand en SQL on parle de "tout ou tous" on emploi généralement EXISTS

  4. #4
    Membre éclairé

    Homme Profil pro
    Developpeur web
    Inscrit en
    Septembre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developpeur web
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 225
    Par défaut
    si je met un where (et que j'enlève le groupby),
    il va me retourner la copie si au moins une commande a le status 2, alors qu'il faut qu'elles soit toutes avec le status deux (ou qu'il n'y ait pas de commande) pour que la copie soit retenue.

    concernant le having il porte sur un groupe de status (group by id_copy)
    ne faut-il donc pas un mot clé de groupe pour spécifier ce champ dans cette clause ?

  5. #5
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Voir mon lien précédent...

    Tu dois faire une requête avec WHERE NOT EXISTS(...) et tester la non-existence d'un status valant 2. Si tel est le cas, alors cela répond à ta problèmatique

  6. #6
    Membre éclairé

    Homme Profil pro
    Developpeur web
    Inscrit en
    Septembre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developpeur web
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 225
    Par défaut
    Ca me semble "bizarre" que ce soit dans la clause where et pas dans la clause having, quoi qu'il en soit je dois faire une sous-requête mais je vois pas trop comment faire.
    WHERE NOT EXISTS (SELECT * FROM Command WHERE id_copy = copieactuelle AND status != 2)

    ma requête serait alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT id_copy,note,id_book
    			FROM copy 
    			WHERE copy.id_book = idlivre
    			AND NOT EXISTS (SELECT * FROM command WHERE command.id_copy = copy.id_copy AND sendingstatus != 2)
    le manuel dit :
    "Si une sous-requête retourne absolument aucune valeur, alors la clause EXISTS <subquery> est TRUE"

    cela ne devrait pas être l'inverse ?

    j'ai testé ça fonctionne correctement, mais je comprend quand même pas le manuel (je fais comme je pense et ça fonctionne)

Discussions similaires

  1. Not all named parameters have been set: [:int]
    Par franco9 dans le forum Hibernate
    Réponses: 1
    Dernier message: 11/09/2014, 19h48
  2. Select all group having same value
    Par olibara dans le forum Langage SQL
    Réponses: 5
    Dernier message: 05/01/2012, 13h26
  3. ptite question sur le having
    Par mic79 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/11/2004, 16h43
  4. GROUP BY et HAVING dans un UPDATE
    Par MashiMaro dans le forum Langage SQL
    Réponses: 3
    Dernier message: 26/08/2003, 08h03
  5. [all]
    Par atao dans le forum Langage SQL
    Réponses: 5
    Dernier message: 22/08/2003, 20h16

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