Page 1 sur 2

generer des requetes

Posté : 23 avr. 2005, 20:01
par rootcad
bonjour,

J'ai un petit gros problemes, je suis actuelement en creation d'un site pour une entreprise qui livre des plateaux repas au entreprises, tout ca avec un system de caddie en ligne (j'ai utilise phpmyshop)
Le probleme auquel je n'avais pas pensé est que pour chaque plateau il y a 7 entrée differentes, 7 plat different.......donc il vas faloir que j'entre chaque plateau avec chaque entrée et chaque plat different.....
ex:
plateau 1 au choix: produit 1 produi 2 et produit A produit B donc il faudra que j'insere dans ma base

plateau 1 avec produit1 et produit A
plateau 1 avec produit1 et produit B
plateau 1 avec produit2 et produit A
plateau 1 avec produit2 et produit B

et ainsi de suite.....

j'ai calculé, au total ca me fais plus de 1000 requettes.....je cherche donc une solution pour generer ces requetes facilement parceque je me vois mal faire ca a la main.....un logiciel peut etre qui me permetrais en entrant les produits de me generer ces requettes facilement

en vous remerciant :)
chris :)

Posté : 23 avr. 2005, 20:24
par Cyrano
Salut,
en réfléchissant un peu, je suis sur qu'on va passer de 1000 à 5 ou 6 requêtes gros max.
Il faut poser le problème à plat (si j'ose dire) et déterminer quelles sont la variables et les constantes.

Primo, quelle est la structure de la base de données. Ensuite, y a-t-il une constante dans la composition d'un plateau : est-ce que c'est par exemple automatiquement 1 entree, 1 plat et 1 dessert. Comment est fait le choix par le client ? galerie clicquable type de plat après type de plat ? Est-ce que je peux prendre deux entrées différentes dans le même plateau au lieu d'une entrée et d'un plat ?
à chaque plat ou entrée ou dessert doit correspondre un identifiant, clé primaire dans la table : c'est ça qu'on va utiliser pour gérer la requête.

On peut très bien générer une requête SQL dynamiquement en PHP. sers-nous des éléments pour qu'on puisse t'aiguiller mieux.

Posté : 23 avr. 2005, 22:22
par rootcad
alors j'espere repondre comme il faut lol
donc pour le plateau le client a le choix entre plusieurs entrées et plusieurs plat, mais il est obligé de les prendre, au niveaude la structure j'ai terminé un plateau "plus simple" ou le client ne devait choisir que l'entrée donc j'ai fais

plateau 1 avec entré 1 = une entrée dans la bdd
plateau 1 avec entré 2 = une entrée dans la bdd

et ainsi de suite

pour mon premier plateau ma table se presente comme ca:

Code : Tout sélectionner

CREATE TABLE `phpmyshop_produit` ( `id_pro` int(5) NOT NULL auto_increment, `id_cat` int(3) NOT NULL default '0', `actif_prod` int(1) NOT NULL default '0', `ref_prod` varchar(15) NOT NULL default '', `titre_prod` varchar(100) NOT NULL default '', `present_prod` tinytext NOT NULL, `detail_prod` longtext NOT NULL, `im_prod` tinytext NOT NULL, `promo_prod` int(1) NOT NULL default '0', `sel_prod` int(1) NOT NULL default '0', `port_prod` float(11,2) NOT NULL default '0.00', `pxht_prod` float(11,2) NOT NULL default '0.00', `pxhtpromo_prod` float(11,2) NOT NULL default '0.00', PRIMARY KEY (`id_pro`), KEY `id_cat` (`id_cat`) ) TYPE=MyISAM; INSERT INTO `phpmyshop_produit` VALUES ('1','1','1','entracte VINAIG','PLATEAU ENTRACTE','Composition : Couverts jetables, 1 petit pain et condiments compris 1composition au choix (Voir ci-dessous) 1 Fromage ou Fromage blanc 1 Dessert au choix : Tarte aux fruits ou Dessert du jour ou salade de fruits frais 1 Boisson au choix : 1/2','SALADE DE CREVETTES AU VINAIGRE DE FRAMBOISES (salade, julienne de légumes, crevettes, tomates, pistaches) ','images/51ab.jpg','0','0','0.00','11.00','0.00'); INSERT INTO `phpmyshop_produit` VALUES ('2','1','1','entracte ALSACI','PLATEAU ENTRACTE','Composition : Couverts jetables, 1 petit pain et condiments compris 1composition au choix (Voir ci-dessous) 1 Fromage ou Fromage blanc 1 Dessert au choix : Tarte aux fruits ou Dessert du jour ou salade de fruits frais 1 Boisson au choix : 1/2','SALADE ALSACIENNE (salade, cervelas, gruyère, raisin, oignons, tomates)','images/51ab.jpg','0','0','0.00','11.00','0.00'); INSERT INTO `phpmyshop_produit` VALUES ('3','1','1','entracte FIDJI','PLATEAU ENTRACTE','Composition : Couverts jetables, 1 petit pain et condiments compris 1composition au choix (Voir ci-dessous) 1 Fromage ou Fromage blanc 1 Dessert au choix : Tarte aux fruits ou Dessert du jour ou salade de fruits frais 1 Boisson au choix : 1/2','SALADE DE PATES « FIDJI » (pâtes, surimi, tomates, mirepoix, fromage blanc, citron)','images/51ab.jpg','0','0','0.00','11.00','0.00'); INSERT INTO `phpmyshop_produit` VALUES ('4','1','1','entracte GERS','PLATEAU ENTRACTE','Composition : Couverts jetables, 1 petit pain et condiments compris 1composition au choix (Voir ci-dessous) 1 Fromage ou Fromage blanc 1 Dessert au choix : Tarte aux fruits ou Dessert du jour ou salade de fruits frais 1 Boisson au choix : 1/2','DUO DU GERS (gésiers et magret de canard , pommes de terre , champignons , tomates)','images/51ab.jpg','0','0','0.00','11.00','0.00'); INSERT INTO `phpmyshop_produit` VALUES ('5','1','1','entracte ASIATI','PLATEAU ENTRACTE','Composition : Couverts jetables, 1 petit pain et condiments compris 1composition au choix (Voir ci-dessous) 1 Fromage ou Fromage blanc 1 Dessert au choix : Tarte aux fruits ou Dessert du jour ou salade de fruits frais 1 Boisson au choix : 1/2','JULIENNE DE VOLAILLE ASIATIQUE (julienne de volaille , riz, soja, mangue, champignons noirs)','images/51ab.jpg','0','0','0.00','11.00','0.00'); INSERT INTO `phpmyshop_produit` VALUES ('6','1','1','entracte XERES','PLATEAU ENTRACTE','Composition : Couverts jetables, 1 petit pain et condiments compris 1composition au choix (Voir ci-dessous) 1 Fromage ou Fromage blanc 1 Dessert au choix : Tarte aux fruits ou Dessert du jour ou salade de fruits frais 1 Boisson au choix : 1/2','ÉMINCE DE BŒUF AU XERES (salade - boeuf , haricots verts , champignons , tomates - compote d\'oignons)','images/51ab.jpg','0','0','0.00','11.00','0.00'); INSERT INTO `phpmyshop_produit` VALUES ('7','1','1','entracte NIÇOIS','PLATEAU ENTRACTE','Composition : Couverts jetables, 1 petit pain et condiments compris 1composition au choix (Voir ci-dessous) 1 Fromage ou Fromage blanc 1 Dessert au choix : Tarte aux fruits ou Dessert du jour ou salade de fruits frais 1 Boisson au choix : 1/2','SALADE A LA NIÇOISE (riz, thon, poivrons, haricots verts, oeuf durs, maïs, anchois)','images/51ab.jpg','0','0','0.00','11.00','0.00'); INSERT INTO `phpmyshop_produit` VALUES ('8','1','1','entracte FROMAG','PLATEAU ENTRACTE','Composition : Couverts jetables, 1 petit pain et condiments compris 1composition au choix (Voir ci-dessous) 1 Fromage ou Fromage blanc 1 Dessert au choix : Tarte aux fruits ou Dessert du jour ou salade de fruits frais 1 Boisson au choix : 1/2','SALADE DU CHEF AUX TROIS FROMAGES (salade , jambon , fromages , tomates , noix , oeuf durs)','images/51ab.jpg','0','0','0.00','11.00','0.00'); INSERT INTO `phpmyshop_produit` VALUES ('9','1','1','entracte JARDIN','PLATEAU ENTRACTE','Composition : Couverts jetables, 1 petit pain et condiments compris 1composition au choix (Voir ci-dessous) 1 Fromage ou Fromage blanc 1 Dessert au choix : Tarte aux fruits ou Dessert du jour ou salade de fruits frais 1 Boisson au choix : 1/2','VARIETE ET FRAICHEUR DU JARDIN (légumes divers et varies suivant saison)','images/51ab.jpg','0','0','0.00','11.00','0.00'); INSERT INTO `phpmyshop_produit` VALUES ('10','1','1','entracte CHARCU','PLATEAU ENTRACTE','Composition : Couverts jetables, 1 petit pain et condiments compris 1composition au choix (Voir ci-dessous) 1 Fromage ou Fromage blanc 1 Dessert au choix : Tarte aux fruits ou Dessert du jour ou salade de fruits frais 1 Boisson au choix : 1/2','ASSIETTE DE CHARCUTERIE (jambon, terrine, saucisson, andouille, etc…)','images/51ab.jpg','0','0','0.00','11.00','0.00');



j'espere vous avoir eclairé un peut sur mon probleme :)

Posté : 23 avr. 2005, 22:42
par Cyrano
OUi, très clair, mais très incomplet malheureusement et j'ai mal formulé ma question plus tôt.

Le but de la manoeuvre, ce n'est sûrement pas de créer toutes les combinaisons possibles de plateaux disponibles, n'est-ce pas ? Donc, je présume qu'il est question d'enregistrer la commande d'un client, puis d'un autre ensuite qui a une composition différente, et ainsi de suite.
Il devrait donc y avoir une table client. Les cardinalités entre la table client et la table produit, c'est 0.n/0.n, il faut donc une table intermédiaire ou on va retrouver les clés primaire du client et des produits. On peut donc concevoir une table de relation `commande` qui aura des clés étrnagères id_client et id_pro : chaque commande va générer plusieurs lignes dans cette table commande à chaque nouvelle composition, mais la requête de recherche consistera à faire une double jointure entre les trois tables dans une clause WHERE qui va ressembler à ceci:

Code : Tout sélectionner

... WHERE clients.id_client = commande.id_client AND commande.id_pro = phpmyshop_produit.id_pro ...
On pourra ajouter une clause pour la date de la commande, date qu'on pourra rajouter dns la table commande au moment de créer cette table.
Au niveau de l'insertion, on va récupérer l'id_pro dans la table produit, l'id_client dans la table client et on ajout la date pour insérer le tout dans la table commande.

De cette manière, le client compose le plateau qu'il veut et il n'y a qu'une seule requête d'insertion(par produit commandé bien entendu).

Est-ce que cette formule répondrait au problème posé ?

Posté : 23 avr. 2005, 23:19
par Invité
bah pas vraiment lol mais merci quand meme de prendre du temps pour me repondre

mon system de caddie est deja fonctionel pas de problemes de ce coté la, mon probleme est que tel que le system fonctione actuelement (je sais c'est pas le plus simple....) pour chaque combinaison entrée+ plat principal ca correspond a un produit dans mon shop, la c'est une combinaison entrée+plat mais ca pourais etre une tomate comme une paire de chaussures, pour rappel j'utilise phpmyshop ;)

donc si je fais le total de toute les combinaison entrée+plat et pour un autre plateau entrée+ plat + desert il faut que j'entre plus de 1500 requetes dans la bdd

desolé j'ai pas du etre tres clair :)

Posté : 23 avr. 2005, 23:22
par pjl
Petit rappel sur le principe des bases de données : une même information ne doit y être stockée une fois.

Maintenant, dis-nous combien de fois tu stockes '1 petit pain et condiments compris'

Posté : 23 avr. 2005, 23:27
par Cyrano
Ok, alors il suffit de définir tous les types de combinaison, je dis bien "types" et non combinaisons tout court. à partir du type entree+plat+dessert, on peut faire un tableau à deux dimensions
$combinaison  = array();
/* ça, c'est la base */
$combinaison['entree'] = array();
$combinaison['plat'] = array();
$combinaison['dessert'] = array();
À partir de là, il faut lister pour chaque entrée existante les possibilités de plats et à chaque plat faire la liste des desserts possibles. Le but de la manoeuvre, c'est de construire un tableau contenant toutes les combinaisons et ensuite de créer dynamiquement la liste de requêtes tout aussi dynamiquement à partir de ce tableau.

Par contre, j'ai du mal à saisir l'intéret de stocker ces combinaisons... :-k

Posté : 23 avr. 2005, 23:29
par Invité
Petit rappel sur le principe des bases de données : une même information ne doit y être stockée une fois.

Maintenant, dis-nous combien de fois tu stockes '1 petit pain et condiments compris'
je sais tres bien..........mais tu connais une solution a ca avec phpmyshop?

Posté : 23 avr. 2005, 23:40
par Invité
Ok, alors il suffit de définir tous les types de combinaison, je dis bien "types" et non combinaisons tout court. à partir du type entree+plat+dessert, on peut faire un tableau à deux dimensions
$combinaison  = array();
/* ça, c'est la base */
$combinaison['entree'] = array();
$combinaison['plat'] = array();
$combinaison['dessert'] = array();
À partir de là, il faut lister pour chaque entrée existante les possibilités de plats et à chaque plat faire la liste des desserts possibles. Le but de la manoeuvre, c'est de construire un tableau contenant toutes les combinaisons et ensuite de créer dynamiquement la liste de requêtes tout aussi dynamiquement à partir de ce tableau.

Par contre, j'ai du mal à saisir l'intéret de stocker ces combinaisons... :-k
pareil je vois pas comment faire autrement avec phpmyshop, je ne m'y connais pas assez en php :s

Posté : 24 avr. 2005, 00:01
par pjl
Petit rappel sur le principe des bases de données : une même information ne doit y être stockée une fois.

Maintenant, dis-nous combien de fois tu stockes '1 petit pain et condiments compris'
je sais tres bien..........mais tu connais une solution a ca avec phpmyshop?
Je retourne la question.
Qu'est-ce qui te fait dire que phpmyshop est adapté à ton problème ?

Posté : 24 avr. 2005, 01:40
par rootcad
bah simplement sa facilité d'utilisation ,le fait qu'il edite une facture HT TTC, le fait de pouvoir choisir l'adresse de livraison :)

Posté : 24 avr. 2005, 10:19
par albat
Bonjour,

Après tous ces posts, j'avoue avoir un peu perdu le fil de la question initiale.

Quel est ton but ?
Remplir une table avec toutes les combinaisons possibles de repas ?

Si c'est bien cela (quoique l'intérêt ne me saute pas aux yeux), la solution est toute simple :
LE PRODUIT CARTÉSIEN. :shock:

J'en vois ouvrir de grands yeux, frémir et hurler : "Vade retro !" :twisted:
Oui, le produit cartésien est plus une erreur et un danger
(celui de faire tomber le serveur de BD) qu'un outil !

Mais il a parfois un petit côté utilitaire :
celui de permettre de lister (pour ensuite remplir une table ou non)
TOUTES les combinaisons possibles d'une série d'éléments.

Ainsi, si tu as 10 entrée, 11 plats et 12 desserts,
il te génèrera les 10*11*12 = 1 320 combinaisons possibles.
Le tout en une seule requête.

Pourquoi est-ce dangereux ?
Parce que si tu rajoutes 5 sortes de pain, 8 vins, 25 boissons,...
(ce qui n'a rien d'extravagant pour un resto)
tu passeras à 10*11*12*5*8*25 = 1 320 000 combinaisons !
Ça va très vite !

Comment fait-on un produit cartésien ?
Ben ça, je te l'expliquerai si c'est vraiment ce que tu souhaites faire...

Mais attention de bien chiffrer le volume de données manipulées puis restituées.
Le produit cartésien est la principale cause de plantage de serveurs de données.

À utiliser avec ultra-modération, donc ! :!: :!: :!:

Posté : 24 avr. 2005, 11:06
par rootcad
c'est gentil de me repondre mais tous les post de reponses metent en avant l'aberation de la solution que j'ai trouve, vous avez pas une idée qui irais un peut plus dans la logique??

merci de prendre le temps de me repondre c'est cool :)

Posté : 24 avr. 2005, 11:41
par rootcad
en fait si vous connaissez un system de caddie ou l'utilisateur peut pour un produit (pour moi un plateau) avoir plusieurs choix possible sur la fiche de ce produit :)

Posté : 24 avr. 2005, 11:44
par Cyrano
Pour te fournir une réponse logique, il faudrait au préalable que tu nous dises le but logique que tu poursuis, but qui jusqu'à présent ne nous apparaît pas très clair. Dans la mesure où les produits sont déjà tous dans la base, quel est l'intérêt (logique) d'avoir une table contenant toutes les combinaisons ?
Dans une base de données, on ne met en principe JAMAIS de champ calculé, or ce type de combinaison est un champ calculé puisque les données sont déjà existantes dans la table des produits. Le calcul ne sert théoriquement que pour l'affichage, voire la production d'une facture ou un bon de livraison. Mais le stocker n'est pas d'une utilité évidente: d'autant moins que je ne saisis pas à terme comment tu pourras par la suite utiliser cette table de combinaison : comment feras-tu pour aller chercher une combinaison particulière sans devoir aller chercher dans la table produits chaque élément qui la compose ??