PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 01-03-2010 19:46:10

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

INNER JOIN et GROUP BY

Bonsoir, je ne trouve pas l'erreur. Je veux utiliser GROUP BY.

La requète qui fonctionne :

  SELECT
    ventes.date_creation,
    ventes.id_produit_vente,
    ventes.quantite,
    ventes.prix_vente,
    produits_vente.etiquette
  FROM
    ventes
  INNER JOIN
    produits_vente
      ON
        ventes.id_produit_vente = produits_vente.id
  ORDER BY
    ventes.date_creation DESC

La requète qui ne fonctionne pas :

  SELECT
    ventes.date_creation,
    ventes.id_produit_vente,

    SUM(ventes.quantite) quantite,

    ventes.prix_vente,
    produits_vente.etiquette
  FROM
    ventes

  GROUP BY ventes.id_produit_vente

  INNER JOIN
    produits_vente
      ON
        ventes.id_produit_vente = produits_vente.id
  ORDER BY
    ventes.date_creation DESC

Merci.

Dernière modification par moijhd (01-03-2010 19:47:00)

Hors ligne

#2 01-03-2010 20:18:53

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : INNER JOIN et GROUP BY

Saluton,
Ta requête n'est pas logique, tu dois faire un GROUP BY sur toutes les colonnes significatives de la clause SELECT.
En outre la clause GROUP BY n'est pas au bon emplacement dans la requête, elle doit être après les jointures et avant la clause ORDER BY.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 01-03-2010 21:48:16

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

Re : INNER JOIN et GROUP BY

La requète suivante fonctionne :

  SELECT
    ventes.date_creation,
    ventes.id_produit_vente,
    SUM(ventes.quantite) quantite,
    ventes.prix_vente,
    produits_vente.etiquette
  FROM
    ventes
  INNER JOIN
    produits_vente
      ON
        ventes.id_produit_vente = produits_vente.id
  GROUP BY
    ventes.id_produit_vente
  ORDER BY
    ventes.date_creation DESC

our ce qui est des données signficatives : date_creation m'importe peu, et prix_vente est le même partout de même que id_produit_vente bien sur et etiquette

C'est donc la position du GROUP BY !

Merci.

Dernière modification par moijhd (01-03-2010 21:50:49)

Hors ligne

#4 01-03-2010 23:02:49

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : INNER JOIN et GROUP BY

moijhd a écrit :

Pour ce qui est des données signficatives : date_creation m'importe peu, et prix_vente est le même partout de même que id_produit_vente bien sur et etiquette.

Je m'interroge sur la cohérence de tout cela, si la date importe peu pourquoi faire une ORDER BY dessus ?
Et si les colonnes  prix_vente, id_produit_vente et etiquette sont partout les mêmes, ça fait bien beaucoup de redondance dans cette base de données.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#5 02-03-2010 10:07:09

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

Re : INNER JOIN et GROUP BY

En fait prix _vente varie...il va falloir que je modifie en conséquence.

Mes tables actuelles :

"produits_vente" : id_produit_vente, etiquette, prix_vente_defaut, date_creation_produit
"ventes" : id_vente, id_produit_vente, prix_vente, quantite, date_creation_vente

Je pense que la structure n'est pas mauvaise.

Mais il va falloir que j'ajoute à "produits_vente" une champ "activation" qui me permet de définir si le produit est encore en vente ou pas ? puisque si on le supprimer définitivement, alors je ne pourrais plus m'y retrouver dans la table "ventes" ?

Puis, je veux que "ventes" soit un historique des toutes les ventes, c'est pour ça que date_creation_vente importe. Mais généralement, je ne vais afficher qu'une partie de la table (une semaine par exemple), du coup, la date ne m'importe pas plus que ça, et cela va être l'etiquette qui va ordonner.

Dernière modification par moijhd (02-03-2010 10:15:41)

Hors ligne

#6 02-03-2010 11:11:19

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : INNER JOIN et GROUP BY

moijhd a écrit :

Puis, je veux que "ventes" soit un historique des toutes les ventes, c'est pour ça que date_creation_vente importe. Mais généralement, je ne vais afficher qu'une partie de la table (une semaine par exemple), du coup, la date ne m'importe pas plus que ça, et cela va être l'etiquette qui va ordonner.

Alors sélectionne avec la fonction YEARWEEK(ventes.date_creation)


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#7 02-03-2010 11:21:22

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

Re : INNER JOIN et GROUP BY

Je comptais ajouter un WHERE date_creation_vente < '' AND date_creation_vente > '' mais cette fonction est interessante.

Cependant, YEARWEEK retoure le numéro de la semaine. Je préférerais que me soit retourné la date du lundi par exemple (je dois pouvoir y arriver en regardant les autres fonctions).

A vrai dire, je n'ai presque jamais utilisé les fonctions plus avancées que SELECT, INSERT et UPDATE avec SQL.

Hors ligne

#8 02-03-2010 11:26:04

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : INNER JOIN et GROUP BY

moijhd a écrit :

YEARWEEK retoure le numéro de la semaine

Non, cette fonction retourne l'année et le numéro de la semaine dans l'année.
Les ventes du lundi, mais lequel parmi les 52 ou 53 lundis d'une année, et quand il y aura plusieurs années dans la table comment feras-tu ?


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#9 02-03-2010 11:49:02

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

Re : INNER JOIN et GROUP BY

Je donne la date de ce lundi ?

Hors ligne

Pied de page des forums