Bonjour, Je me permet de demander de l'aide car suite à plusieurs recherches, je n'arrive pas à concaténer un même champ d'une table. Je m'explique : voila mes trois tables : [code] pizzas : ->id ->name ->base etc.... ingredients : ->id ->name ingredients_pizzas : ->ingredients_id ->pizzas_id [/code] J'aimerais lors d'une requête récupérer toutes les informations de toutes les pizzas pour les lister mais également récupérer tous les ingrédients attacher à une pizzas mais concaténer.Car je récupère bien les pizzas et avec leurs ingrédients ingrédient mais avec plusieurs objets pour une pizza. Avec mes recherches je suis tomber sur GROUP_CONCAT qui fait bien sont travaille mais ne me renvois qu'une pizza au lieu de toutes :( C'est la ou je bloque. **résulta de ma requête sans GROUP_CONCAT:** [code] Array ( // 4 objet pour une pizza dont l'id est 1 [0] => stdClass Object ( [id] => 1 [name] => Margarita [img] => [prix_petite] => 5.9 [prix_grande] => 7.9 [prix_geante] => 14 [Ingredients] => jambon ) [1] => stdClass Object ( [id] => 1 [name] => Margarita [img] => [prix_petite] => 5.9 [prix_grande] => 7.9 [prix_geante] => 14 [Ingredients] => reblochon ) [2] => stdClass Object ( [id] => 1 [name] => Margarita [img] => [prix_petite] => 5.9 [prix_grande] => 7.9 [prix_geante] => 14 [Ingredients] => olive ) [3] => stdClass Object ( [id] => 1 [name] => Margarita [img] => [prix_petite] => 5.9 [prix_grande] => 7.9 [prix_geante] => 14 [Ingredients] => fromage ) [4] => stdClass Object ( [id] => 2 [name] => Régina [img] => [prix_petite] => 6.9 [prix_grande] => 9.3 [prix_geante] => 15.5 [Ingredients] => olive ) et.... [/code] Ma requête : [code] SELECT Pizza.id,Pizza.name,Pizza.img,Pizza.prix_petite,Pizza.prix_grande,Pizza.prix_geante,GROUP_CONCAT( DISTINC Ingredients.name ) as Ingredients FROM pizzas as Pizza LEFT JOIN ingredients_pizza as Ingredients_pizza ON Pizza.id=Ingredients_pizza.pizza_id LEFT JOIN ingredients as Ingredients ON Ingredients.id=Ingredients_pizza.ingredients_id ORDER BY Pizza.id [/code] **Résulta de ma requête avec GROUP_CONCAT :** [code] Array ( [0] => stdClass Object ( [id] => 1 [name] => Margarita [img] => [prix_petite] => 5.9 [prix_grande] => 7.9 [prix_geante] => 14 [Ingredients] => jambon,fromage,olive,reblochon,olive ) ) [/code] auriez-vous une solution ou une piste pour se problème? Je vous remercie d'avance :)

8 réponses


BenFarhat
Réponse acceptée

Je ne sais pas si tu vas me croire mais je suis sorti après t'avoir lu et je me suis taper une de ces pizzas géantes (je crois que c''était bolona ou un truc du genre avec viandes hachés et supplément d’oignons) !!!!!! j'ai même du faire appel a e l'aide extérieur pour la finir :) Merci à toi :) Bref et à la pizzeria j'ai eu le temps de réfléchir à ton problème (j'avais l'inspiration aux niveaux des narines) et donc voila... je vais dire un truc pour voir si j'ai bien compris 1 - tu as une table (sans jeux de mot) des différentes bouffes genre pizza, macaroni berlusconi et tout ce qui fini en i bref! 2 - tu as également une autre table des ingrédients optionnels de chaque bouffe (ou pizza) donc elle contiendra l'id de la pizza relative qui y sera définit comme "clé étrangère" 3 - et tu as une table des commandes dans lequel le client choisit ce qu'il veut manger (par exemple une salade italienne) et pour ce qu'il a choisit tu lui affiches les ingrédients optionnels qu'il peut ou pas inclure (jambon, fromage, huile d'olive, mayo etc...) et qui logiquement influeront sur le prix de la commande (dans ce cas il faudra inclure également une caractéristique "portion" ou je sais pas comment on appelle ca pour dire 2 olive c'est un prix, 10 olive c'est un autre) bref je ne sais pas quel techno tu utilises (du procédural, de l'MVC maison ou un framework tel que zend, symnfony ou cakephp) mais l'idée de Nata est effectivement bonne. Tu peux rajouter et utiliser ce script qui t'aidera fortement [url=http://harvesthq.github.com/chosen/]http://harvesthq.github.com/chosen/[/url]-> dans ton cas tu choisiras la version multiple select et comme tu peux le voir ca permettra de gérer l'ajout et la suppression d'un ingrédient facilement. Donc au final je penses que tu devrais revoir ta base car c'est vrai qu'il y a un truc qui cloche (ou alors que j'ai pas compris ce qui est le plus probable à 99.9999656%) et si je ne me trompe pas dans la gestion du resto inclure également le nom du cuisto qui a préparé la pizza, une case permettant de dire qu'elle elle est prête, un suivi par date et heure des différentes commandes et une gestion des statistiques pour le coté financier qui te dira par exemple que personnes n'aiment les olives (ou très peu) et que le mois prochains il ne faudra pas y mettre autant d'argent, un champ photo pour que le clients puissent se lêcher les babines et également la case "à livrer" (si ton application est en ligne) "à emporter" (si le serveur passe la commande sur place via une console intern) ou "à dévorer sur place devant le caissier". Donc je résume ce que j'ai dit, revois la structure de ta base de donnée et si possible utilise le framework cakephp, en suivant les conventions tu peux facilement faire quelques choses d'exploitables en quelques dizaines de minutes!** Il y a des scripts qui également peuvent améliorer l'interface [url=http://tympanus.net/Tutorials/3DRestaurantMenu/]3D Restaurant Menu/[/url]

Natà
Réponse acceptée

"et j'aimerais vraiment éviter la saisie pour l'administrateur ainsi que l'inscrit c'est pour sa "

Tu peux très bien éviter tout ça; garder ton système de checkbox et faire le traitement à l'insertion dans la base de donnée de manière à ce que les ingrédients soient ajoutés en respectant le système de virgules.

En fait, au niveau de la structure ça se rapproche beaucoup d'un système de blog ou une pizza serait un billet et les ingrédients seraient des "tags", cherche dans ce sens la, tu vas trouver énormément de tutos et tu vas facilement pouvoir adapter à ta sauce (sans jeux de mots non plus^^).

Ensuite, tu est toujours à temps si c'est vraiment nécessaire, de créer une table avec des ingrédients optionnels pour les clients bien chiants qui voudraient une pizza nutella/corn flakes/chantilly. :)

En tout cas l'idée de composer la pizza en drag'n drop est vraiment pas mal et c'est vrai que ça donne faim. :)

ksta
Auteur
Réponse acceptée

Bonjour,

J'en réussi a concaténer directement en SQL un même champ avec la fonction GROUP_CONCAT et un GROUP BY :)

pour ceux que sa intéresse voici le lien qui ma aider :) :

GROUP_CONCAT

Merci à vous de m'avoir aider cela ma permis de mieux organiser ma base de donnée :)

merci encore :)

Déjà! ton problème il donne hyper faim (jambon, margarita, olive) comment tu veux qu'on se concentre sur la solution :)

ksta
Auteur

:) et pourtant moi sa ma couper la faim :)

l'idéale serait de réussir à afficher les ingrédients pour donner vraiment la faim mais également le choix des pizzas ;)

Salut,
Je pense que plutôt que d'essayer de simplifier la solution tu devrais essayer de simplifier le problème.

Qu'est ce qui t'empêches de mettre les ingrédients directement dans la table Pizzas ?
Séparés par des virgules, tu peux ensuite facilement récupérer toutes tes pizzas comme dans le dernier exemple que tu donnes avec un simple

SELECT * FROM Pizzas

Et il sera également possible de séparer les ingrédients avec la fonction explode()

ksta
Auteur

Salut,

en faite j'aimerais donner la possibiliter à l'administrateur de sélectionner à l'aide de checkbox les ingrédients qui compose une pizza mais également donner la possibilité au inscrit de composer une pizza à l'aide du drag and drop et j'ai penser qu'il serait plus logique de séparer les ingrédients d'une pizza pour ensuite les insérés avec leur id.

et j'aimerais vraiment éviter la saisie pour l'administrateur ainsi que l'inscrit c'est pour sa :)

si vraiment il n'y a pas de solution je ferais ta solution mais je pense qu'il doit y avoir une solution :)

merci en tous de m'aider :)

ksta
Auteur

Bonjour,

désoler je ne pouvais pas répondre hier car je n'avais pas d'ordinateur mais merci a vous pour votre aide vraiment :)

@BenFarhat: " Je ne sais pas si tu vas me croire mais je suis sorti après t'avoir lu et je me suis taper une de ces pizzas géantes (je crois que c''était bolona ou un truc du genre avec viandes hachés et supplément d’oignons) !!!!!! j'ai même du faire appel a e l'aide extérieur pour la finir Merci à toi ".

^^ sa ta vraiment donner envie de manger une pizza :) de rien si tu à bien manger c le principale :)

" bref je ne sais pas quel techno tu utilises (du procédural, de l'MVC maison ou un framework tel que zend, symnfony ou cakephp) mais l'idée de Nata est effectivement bonne. "

J'utilise le MVC maison de grafikart qui ma permis de bien comprendre le MVC mais tu ma également aider pour mon problème concernant l'ajax dans la section PHP merci encore :).

Je trouve le menu 3D exelent :) merci pour ce lien :) sait tu si c'est compatible tous navigateur? :)

@Natà : merci pour tes conseil je pense que je vais revoir ma base :) mais je n'arrive pas à bien la concevoir au mieux.Je te remercie également car grâce a ta remarque j'ai vu mon erreur au niveau des boisons et Glaces car je peut regrouper tous dans une table produit mais je n'arrive pas a voir comment géré les pizzas du mois car je compte afficher les pizzas du mois et donner la possibiliter de voir les ancienne pizzas des année précédente.

Pour ta remarque sur les ingrédients, lors de la création du MCD, comme il y avait 1,N de chaque coter des tables cela crée un table de liaison c'est pourquoi je les est pas insérée directement dans pizzas.J'aimerais éviter justement de rajouter des lignes de code pour le traitement des nom d'ingrédients car si j'arrive bien a récupérer les ingrédient cela mévitera de rajouter du code :)

En faite, comme vous vous en êtes doutés c pour une pizzeria :) elle ne fait que de l'emporter. Elle vend des pizzas, des salades composées des boissons et des glaces :) (maintenant je donne soif ^^)

Voici le Schéma de la base : (il manque la table boisons et Glace et j'ai mi les droit d'édition au public)

Schémat

Le principe du site, permettre au personnes de consulter les produits mais également voter les pizzas pour permettre au client de voir leur pizzas préféré revenir souvent ou même peut être un jour elle sera sur le menu :)

Il peut également composer sa pizza ou salade de son choix pour la commander et ainsi l'acheter.

Suite a vos remarque et votre aide, j'ai pris conscience de certaine erreur et j'aurais aimer savoir si vous pourriez m'aider pour le schéma au niveau des produits et ingrédients :(

Voici le nouveau Schémat pour la base de donnée (j'ai penser à un héritage de Produit):

Schémat Modifier

Merci infiniment pour votre aide :)