Vous n'êtes pas identifié(e).
Pages :: 1
Bonsoir,
Je pars de cette requête qui me retourne une liste de sandwichs avec les composantes associées à chaque sandwich sous la forme d'une chaine de caractère concaténée :
[code mysql]
SELECT
kfet_sandwichs.sandwich,
kfet_sandwichs_types.sandwich_type,
kfet_sandwichs.id_sandwich,
GROUP_CONCAT(
DISTINCT kfet_composantes.id_composante
ORDER BY kfet_composantes.composante ASC SEPARATOR ','
) AS ids_composantes,
GROUP_CONCAT(
DISTINCT kfet_composantes.composante
ORDER BY kfet_composantes.composante ASC SEPARATOR ','
) AS composantes
FROM
kfet_sandwichs
NATURAL JOIN kfet_sandwichs_composantes
NATURAL JOIN kfet_composantes
NATURAL JOIN kfet_sandwichs_types
GROUP BY
kfet_sandwichs.id_sandwich
ORDER BY
kfet_sandwichs.sandwich ASC
[/code]
D'abord, je voudrais faire la même requête mais je voudrais qu'elle prenne en compte les sandwichs qui n'ont pas de composante (la chaine concaténée est alors vide).
Je préférerais aussi qu'à la place de la chaine concaténée, j'ai un tableau que je puisse par exemple exploiter directement avec un foreach en php.
Pour faire apparaitre tous les sandwichs, ma solution consiste à rechercher tous les sandwichs, puis à imbriquer la requête pour obtenir les composantes, ce qui fonctionne bien mais je voudrais votre avis :
[code mysql]
SELECT
kfet_sandwichs.sandwich,
kfet_sandwichs_types.sandwich_type,
kfet_sandwichs.id_sandwich,
(
SELECT
GROUP_CONCAT(
CONCAT(
kfet_composantes.id_composante,
',',
kfet_composantes.composante
)
SEPARATOR ';'
)
FROM
kfet_composantes
NATURAL JOIN
kfet_sandwichs_composantes
WHERE
kfet_sandwichs_composantes.id_sandwich = kfet_sandwichs.id_sandwich
GROUP BY
kfet_sandwichs_composantes.id_sandwich
ORDER BY
kfet_composantes.composante ASC
) AS composantes
FROM
kfet_sandwichs
NATURAL JOIN
kfet_sandwichs_types
ORDER BY
kfet_sandwichs.sandwich ASC
[/code]
Pour mettre sous la forme d'un array, je n'ai as trouvé de solution. De même, peut-on faire une sous-requête qui redonne plus d'un champ, et plus d'une ligne car je n'ai pas réussi.
Merci !
Hors ligne
Bonjour,
Pour résoudre ton problème avec l'affichage de tes sandwichs qui n'ont pas de composantes, ca nécessite une structure de requête un peu plus complexe (utilisation de requêtes dérivées) et pour t'aider sur ce point j'aurais besoin de connaître la structure de tes tables.
Ensuite, pour ce qui est du foreach, il suffit de faire en PHP un implode préalable sur la colonne du group_contact avec pour séparateur le même utilisé que dans ton group_contact c'est à dire ici ';' .
PS: Je ne vois pas trop l'intérêt dans ta deuxième requete de cumuler un group_concat et un concat sur la même colonne.
Cordialement,
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Finalement, j'ai utilisé une requète pour récupérer les sandwichs et une sous requête pour récupérer les composantes. Mais je me rensegnerais sur les requetes dérivées).
Ensuite, mon but était de me passer de l'implode que j'utilise maintenant.
Je fais la concaténation parce que je voulais récupérer deux champs dans ma sous-reqûete, mais je n'ai pas réussi à obtenir la syntaxe.
Merci
Hors ligne
Bonjour,
GROUP_CONCAT(Champ1,', ',Champ2 SEPARATOR ';') As Alias1
Tu peux aussi faire GROUP_CONCAT(DISTINCT Champ1,', ',Champ2 SEPARATOR ';') As Alias1
CONCAT(Champ1,', ',Champ2) As Alias1
GROUP_CONCAT : J'ai mis une virgule pour séparer champ1 de champ2 mais tu peux mettre ce que tu veux tant que c'est différent de SEPARATOR.
Je te conseille de mettre un alias sur de tels champs.
Bonne continuation
Dernière modification par Jc (01-09-2010 07:20:13)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Je ne trouve rien sur les requètes dérivées (c'est comme les sous-requètes ?).
Est ce que je peux avoir un lien vers un tutoriel (en français ou en anglais).
Merci !
Hors ligne
Bonjour,
Désolé de ne pas t'avoir répondu avant, mais je profite de cet oubli pour te faire remarquer que c'est désagréable de voir un post sans suite quand on se donne du mal pour répondre/aider quelqu'un. Donc voici ton lien. Tu auras comme ça un bon aperçu des différents types de requêtes qui peuvent exister.
Une requête dérivée est par extension une requête possédant une sous-requête dans sa clause from. Attention aussi car de telles requêtes ne peuvent être corrélées comme il l'est dit dans le lien fourni.
++
Dernière modification par Jc (22-10-2010 00:00:29)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Ok ! Merci pour ce lien.
Je le parcourerais.
See you !
Hors ligne
Pages :: 1