|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Invité de passage
![]() Inscription : novembre 2008 Messages : 5 ![]() |
Bonjour,
Je dispose d'un ensemble de tables pour stocker des chroniques de disques. Ces tables se nomment ctx, disques, groupes, miroir. Le stockage des informations suit deux schémas, selon que le disque chroniqué soit d'un type ou d'un autre. En gros : - si mon disque est de type 1, alors la table disques contient les informations de base du disque, (label, date de sortie, nom, etc), la table groupes contient les informations sur le groupe qui a composé le disque (nom, origine, site web etc), et enfin la table ctx stocke toutes les chroniques qui ont été écrites pour ce disques (chronique, auteur de la chronique,date de rédaction, etc) - si mon disque est de type 2, alors il n'existe qu'une seule table, la table miroir, qui stocke TOUTES les informations précédentes dans cette unique table (groupe, disque, chronique, label, date de sortie, date de redaction etc) Voici un bref aperçu de la structure et des contraintes d'intégrité de mes tables afin de cerner le problème : Citation:
Citation:
Citation:
Citation:
- sélectionner les 20 chroniques les plus récentes se rapportant à un disque de type 1 (table ctx) et y adjoindre les informations qui vont bien (tables groupes et disques) - sélectionner les 10 chroniques les plus récentes se rapportant à un disque de type 2 (table miroir uniquement) - sélectionner au hasard une chronique de disque se rapportant à un disque de type 1 (table ctx) et y adjoindre les informations qui vont bien (tables groupes et disques) MySql semble peu apprécier l'utilisation de LIMIT dans plusieurs requêtes UNIONées, aussi je recoure à du sous requêtage pour contourner le problème. Ma requête actuelle se présente ainsi : Code :
Le résultat : - conforme à l'attendu pour le premier SELECT - conforme à l'attendu pour le second SELECT - conforme pour le dernier SELECT, qui renvoie tous les enregistrements Pour pallier ce désagrément je rajoute à la fin de la requête sur l'ensemble du résultat, ainsi je ne conserve que le nombre d'enregistrements attendu. Le problème : La dernière requête renvoie les enregistrements triés sur le CodeChronique, et non aléatoirement. Je ne sais pas si le dysfonctionnement de l'aléatoire provient de la dernière sous-requête ou du comportement du ANY en lui-même, que je ne comprends pas tout à fait (prend-il le plus petit enregistrement de la liste en premier ? Le premier de la liste en premier ?) Si quelqu'un a une autre idée pour réaliser cette requête (sans la découper en plusieurs requêtes sans UNION), je suis toutes ouïes Merci. |
||||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com