Requête complexe - SQL/NoSQL - Programmation
Marsh Posté le 31-01-2008 à 14:21:12
en sql uniquement, un tableau et des tris sur un tableau? par quel miracle? Soit je ne comprends pas la question, soit tu ne comprends pas ce que fait le sql.
Marsh Posté le 31-01-2008 à 14:27:49
J'ai mal posé la question :
Est-il possible en une requête SQL de ramené un recordset capable lui seul de construire le tableau via un bouclage simple d'un langage type PHP.
c'est à dire un recordset dont les lignes serait :
ANNONCE_ID | Puissance | Année | Prix
13 | 100ch | 2002 | 20000
16 | 120ch | 2003 | 45000
Car moi pour obtenir ce resultset je passe par un resultset comme celui ci :
ANNONCE_ID | CRITERE_NOM | VALEUR
13 | Puissance | 100ch
13 | Année | 2002
13 | Prix| 20000
16 | Puissance | 120ch
16 | Prix | 45000
16 | Année | 2002
Et via un traitement PHP je reformate pour obtenir le bon format, mais du coup je ne peut pas effectuer de ORDER BY ou de LIMIT sur ma requete.
Donc ma question est juste : est il possible d'obtenir le premier resultset avec uniquement du SQL ?
Merci d'avance
Marsh Posté le 31-01-2008 à 14:30:19
pas de manière standard.
Marsh Posté le 31-01-2008 à 14:32:41
Merci pour ce premier élément de réponse.
Pourrai tu m'orienter vers une solution ?
Pour l'instant je vais continuer a gérer avec PHP derrière mais ça m'oblige a faire une requete qui prend l'intégralité des annonces à chaques fois et j'ai peur pour les temps de chargement de la page qd le volume arrivera ...
Je pourrai aussi créer des table de préformattage de données (une pour chaque catégorie) ou encore des vues.
Est ce une bonne piste ?
Marsh Posté le 31-01-2008 à 14:33:53
yellu a écrit : Merci pour ce premier élément de réponse. |
Comment ça tu es obligé de prendre l'intégralité des annonces?
Si tu n'en veux qu'une partie tu n'en prends qu'une partie...
Marsh Posté le 31-01-2008 à 14:36:30
Si l'internaute veux trier selon le critere "Modèle", la table annonce ne me permet à elle seule de limiter le resultset en quantité renvoyé.
Donc je prend tout, et je trie au niveau des "Array" PHP que je construit dynamiquement.
Ou alors tu me fais réfléchir au fait que je pourrai faire une premiere requete sur Annonce avec une jointure seulement sur le critere de Modele pour recupere les ID des X premiers puis ensuite faire une requete complete sur ces ID la !
Non ?
Marsh Posté le 31-01-2008 à 14:39:32
yellu a écrit : Si l'internaute veux trier selon le critere "Modèle", la table annonce ne me permet à elle seule de limiter le resultset en quantité renvoyé. |
Tu peux aussi utiliser des sous-requêtes :
select ...
from annonce, critere, ...
where annonce_id in (select id_annonce from critere where critere_nom='modele' and valeur ='jolimodele')
select a.*, c2.*
from annonce a, critere c, critere c2
where a.annonce_id = c.annonce_id
and c.critere_nom = 'modele'
and c.valeur = ...
and c2.annonce_id = a.annonce_id
Marsh Posté le 31-01-2008 à 14:46:01
Tu trouveras toujours des solutions batardes pour le faire, surtout en MySQL.
Mais ne cherche pas, c'est pas au SGBD de s'occuper de ça (cf. ma signature)
Le résultat que tu reçois actuellement est le résultat que tu dois récupérer.
Si vraiment tu as toujours la même liste de critères, en faisant une jointure sur la table critère par critère possible, tu pourras ramener autant de colonnes que de critères, sans pour autant faire du SQL non standard. Ceci dit, cela va multiplier les lectures dans la base, ce qui n'est pas une bonne idée en ce qui concerne les performances... D'autant que la table qui liste les valeurs des critères est certainement la plus grosse de ta base, donc c'est ridicule d'y accéder plusieurs fois pour chaque ligne de ta requête.
Marsh Posté le 31-01-2008 à 14:46:59
ReplyMarsh Posté le 31-01-2008 à 14:48:33
MagicBuzz a écrit : euh, non, des jointures suffisent |
putain mais faut que je dorme la nuit, moi...
Marsh Posté le 31-01-2008 à 13:59:33
Bonjour à tous,
J'ai une problématique sur un site de petites annonces.
Les annonces devant portés sur tout et n'importe quoi, nous avons optés pour des critères d'annonces dynamiques, je m'explique :
Nous avons une table ANNONCE ayant un ID, une date, une clé de catégorie et une clé de client
Nous avons une table de critère ayant un ID et un nom de critère
Enfin une table lie les catégorie au critère grace a l'ID categorie et à l'ID critère.
ANNONCE
ID | DATE | CATEGORIE_ID | CLIENT_ID
CATEGORIE
ID | NOM
CRITERE
ID | NOM
CATEGORIE_DEFINITION
CATEGORIE_ID | CRITERE_ID
VALEUR
ANNONCE_ID | CRITERE_ID | TEXTE
CLIENT
ID | NOM | PRENOM
La problématique se situe lorsque l'on veux lister les annonces d'une catégorie.
Je souhaite créer un tableau ayant une colonne par critère, et pouvoir effectuer des opération de tri sur celle ci.
J'arrive à faire cela mais en m'aidant d'un langage additionnel (PHP).
Pensez vous que c'est faisable en SQL uniquement ?
PS : J'utilise mySQL
Merci d'avance