PHP|Débutant :: Forums

Advertisement

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

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

#1 08-10-2009 13:58:31

yann18
Membre
Inscription : 10-09-2009
Messages : 11

Ecriture de requête...

Bonjour,

Je rencontre des difficultés dans l'écriture d'une requête. Il s'agit de récupérer (en autres) des produits pour un bon de commande. Pour ce faire, j'ai trois composants essentiels à prendre en compte :

les fournisseurs
les labo(ratoire)s
Chaque labo a ses sections (CAP, BP, BAC...)

La table admincom regroupe la totalité des commandes créées. Je dois pouvoir récupérer tous les produits commandé pour chaque fournisseur. Puis indiquer par la suite quel labo a enregistré tels produits pour quelle section. Cela donnerait à l'affichage:
le fournisseur
le labo
la section
la désignation du produit - la quantité - le conditionnement
etc.
la section
etc.
labo
etc.
Pour l'instant, j'ai écris ceci:

$select = 'SELECT produits.designation, quantite, section, admincom.idUser, labo, produits.conditionnement FROM produits INNER JOIN admincom ON admincom.designation = produits.designation INNER JOIN users ON admincom.idUser = users.idUser INNER JOIN fournisseurs ON produits.idFrs = fournisseurs.idFrs WHERE fournisseurs.idFrs = 2 GROUP BY produits.designation, produits.conditionnement';

je pense que mes jointures sont bonnes, mais je bloque sur la fin de la requête... Je fais donc appel à vos lumières. La structure de la base:

-- Base de données: `alimentaires`
-- Structure de la table `admincom`
--
CREATE TABLE IF NOT EXISTS `admincom` (
  `idCom` int(4) NOT NULL AUTO_INCREMENT,
  `designation` text COLLATE utf8_unicode_ci NOT NULL,
  `quantite` decimal(10,1) NOT NULL,
  `section` text COLLATE utf8_unicode_ci NOT NULL,
  `idUser` int(2) NOT NULL,
  PRIMARY KEY (`idCom`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=133 ;

-- --------------------------------------------------------

-- Structure de la table `categories`
--

CREATE TABLE IF NOT EXISTS `categories` (
  `idCat` int(2) NOT NULL AUTO_INCREMENT,
  `categorie` text COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`idCat`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=9 ;

-- --------------------------------------------------------
--
-- Structure de la table `conditionnement`
--

CREATE TABLE IF NOT EXISTS `conditionnement` (
  `idCond` int(2) NOT NULL AUTO_INCREMENT,
  `conditionnement` text COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`idCond`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=29 ;

-- --------------------------------------------------------

-- Structure de la table `fournisseurs`
--

CREATE TABLE IF NOT EXISTS `fournisseurs` (
  `idFrs` int(2) NOT NULL AUTO_INCREMENT,
  `raisonSociale` text COLLATE utf8_unicode_ci NOT NULL,
  `adresse1` text COLLATE utf8_unicode_ci NOT NULL,
  ...
  PRIMARY KEY (`idFrs`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=10 ;

-- --------------------------------------------------------

-- Structure de la table `produits`
--

CREATE TABLE IF NOT EXISTS `produits` (
  `idPdts` int(4) NOT NULL AUTO_INCREMENT,
  `designation` text COLLATE utf8_unicode_ci NOT NULL,
  `conditionnement` text COLLATE utf8_unicode_ci NOT NULL,
  `idFrs` int(2) NOT NULL,
  `idCat` int(2) NOT NULL,
  PRIMARY KEY (`idPdts`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=441 ;

-- --------------------------------------------------------

-- Structure de la table `sections`
--

CREATE TABLE IF NOT EXISTS `sections` (
  `idSect` int(2) NOT NULL AUTO_INCREMENT,
  `section` text COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`idSect`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=7 ;

-- --------------------------------------------------------

-- Structure de la table `users`
--

CREATE TABLE IF NOT EXISTS `users` (
  `idUser` int(2) NOT NULL AUTO_INCREMENT,
  `nom` text COLLATE utf8_unicode_ci NOT NULL,
  `mdp` text COLLATE utf8_unicode_ci NOT NULL,
  `labo` text COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`idUser`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=15 ;

merci,

Hors ligne

#2 08-10-2009 14:18:12

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : Ecriture de requête...

Salut ,

Commence par préciser la table de quantite, section et labo dans ta requete wink


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#3 08-10-2009 14:54:30

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

Re : Ecriture de requête...

Saluton,
Commençons par y voir plus clair :

SELECT produits.designation, quantite,
       SECTION, admincom.idUser, labo,
       produits.conditionnement
FROM produits
INNER JOIN admincom ON admincom.designation = produits.designation
INNER JOIN users ON admincom.idUser = users.idUser
INNER JOIN fournisseurs ON produits.idFrs = fournisseurs.idFrs
WHERE fournisseurs.idFrs = 2
GROUP BY produits.designation, produits.conditionnement

Alors pourquoi faire un GROUP BY si tu n'utilises aucune fonction statistique ou d'agrégation ?


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

#4 09-10-2009 10:09:12

yann18
Membre
Inscription : 10-09-2009
Messages : 11

Re : Ecriture de requête...

Bonjour,

je pense avoir progressé en écrivant ceci:

$select = 'SELECT f.raisonsociale, p.designation, a.quantite, a.section, a.idUser, u.labo, p.conditionnement
 FROM produits AS p INNER JOIN admincom AS a ON a.designation = p.designation INNER JOIN users AS u ON a.idUser = u.idUser INNER JOIN fournisseurs AS f ON p.idFrs = f.idFrs WHERE f.idFrs = 2 ORDER BY u.labo, a.section';

J'obtiens bien toutes les données voulues, mais pas dans le bon ordre à l'affichage. Comme écrit dans le premier post, je dois obligatoirement lire les informations dans cet ordre:
le labo
la section
Tous les produits commandés pour cette section
--------
la section
produits
--------
labo
etc.
pour l'affichage des données, j'ai rédigé ceci:

//Affichage du fournisseur
$data = mysql_fetch_array($requete);
echo $data['raisonsociale'].'<br><br>';
while($data1 = mysql_fetch_array($requete)){
 echo $data1['labo'].'<br>';
 if(!empty($data1['section'])){
    echo strtoupper($data1['section']).'<br>';
 }
 echo $data1['designation'].' '.$data1['quantite'].' '.$data1['conditionnement'].'<br>';
}

et le serveur de répondre:

Boulangerie Treilles
CAP
Lardons fum 3.0 kg
Boulangerie Treilles
CAP
Roquefort 2.0 kg
Cuisine Langin
CAP
Cr 6.0 kilo(s)
Cuisine Langin
CAP
Beurre plaque 250 gr 20.0 pi
Cuisine Langin
CAP
Cr 6.0 litre(s)

Pour le labo Cuisine/ section CAP, il faudrait que je puisse ranger en dessous de la section CAP Cr 6.0 kilo(s), Beurre plaque 250 gr 20.0 pi...
Et là, je sèche...
merci,

Hors ligne

#5 09-10-2009 10:51:19

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

Re : Ecriture de requête...

Ce n'est plus un problème MySQL, c'est un problème d'algorithmique PHP.
Parcours d'une liste (la ressource retournée par mysql_query) avec gestion de ruptures.
Tu peux éventuellement t'en tirer avec GROUP_CONCAT, mais tu sors du standard SQL.


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

#6 09-10-2009 15:03:51

yann18
Membre
Inscription : 10-09-2009
Messages : 11

Re : Ecriture de requête...

Ok, merci bien.

Hors ligne

Pied de page des forums