[RESOLU] Cumuler les résultats de plusieurs SELECT

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Cumuler les résultats de plusieurs SELECT

Re: Cumuler les résultats de plusieurs SELECT

par Couin » 16 sept. 2019, 04:37

Hello,

Merci pour ta réponse :)

Pour le ORDER BY, si je les enleve, les résultats ne sont pas dans l'ordre souhaité.
Pour la fonction, j'ai essayé de mettre le contenu du while dans une fonction et d'appeler la fonction, mais cela n'a pas marché.

Du coup j'ai testé avec un array que je remplis par les 3 requêtes et le résultat est à priori ok :)

Voici le code pour qui chercherait un truc similaire :)

Code : Tout sélectionner

$resultats = array(); $query = "SELECT * FROM events WHERE day NOT LIKE '&0' AND day NOT LIKE '&' AND type = 1 ORDER BY day ASC, time ASC"; $requete = mysqli_query( $dbrdj, $query ) ; while( $result = mysqli_fetch_object( $requete ) ) { $name = $result->name; $time = $result->time; $day = $result->day; $hours = $result->hours; $data = $result->data; $enabled = $result->enabled; $resultats[] = array('name' => $name, 'time' => $time,'day' => $day, 'hours' => $hours,'data' => $data, 'enabled' => $enabled); } $query = "SELECT * FROM events WHERE (day LIKE '&0' OR day LIKE '&') AND type = 1 ORDER BY day ASC, time ASC"; $requete = mysqli_query( $dbrdj, $query ) ; while( $result = mysqli_fetch_object( $requete ) ) { $name = $result->name; $time = $result->time; $day = $result->day; $hours = $result->hours; $data = $result->data; $enabled = $result->enabled; $resultats[] = array('name' => $name, 'time' => $time,'day' => $day, 'hours' => $hours,'data' => $data, 'enabled' => $enabled); } $query = "SELECT * FROM events WHERE type NOT LIKE 1 ORDER BY type DESC, day ASC, time ASC"; $requete = mysqli_query( $dbrdj, $query ) ; while( $result = mysqli_fetch_object( $requete ) ) { $name = $result->name; $time = $result->time; $day = $result->day; $hours = $result->hours; $data = $result->data; $enabled = $result->enabled; $resultats[] = array('name' => $name, 'time' => $time,'day' => $day, 'hours' => $hours,'data' => $data, 'enabled' => $enabled); } foreach($resultats as $ligne){ foreach($ligne as $cle=>$valeur){ $$cle = $valeur; } Ici les diverses opérations d'affichage voulu } // Fin du foreach
A bientôt :)

Re: Cumuler les résultats de plusieurs SELECT

par or 1 » 15 sept. 2019, 15:53

enlève les order by pour le union.
si vraiment cela ne fonctionne pas, tu peux parcourir les 3 résultats des requêtes, mettre le contenu dans un seul tableau (éventuellement le trier) et travailler à partir de ce tableau.
tu peux aussi faire une fonction qui affiche les données et que tu appelles 3 fois.

Cumuler les résultats de plusieurs SELECT

par Couin » 15 sept. 2019, 14:45

COUIIIIN !

Voilà, une table "events" avec plusieurs colonnes (jusque là , ca va :P ) , avec notamment les colonnes suivantes :
type : les valeurs sont pour le moment entre "0" et "2"
time : une heure au format "23:59:59"
day : les valeurs stockées indiquent les jours auxquels l’événement doit être déclenché, et c'est sous forme "&1&2&3&4&5&6&0" (donc dans cet exemple tous les jours de la semaine et du week-end)
hours : les valeurs stockées indiquent les jours auxquels l’événement doit être déclenché, et c'est sous forme "&11&12&13&14" (donc dans cet exemple, à 11h , 12h ,13h et 14h)

Pour une question d'ordre de présentation du contenu, je dois effectuer 3 requetes :

Code : Tout sélectionner

SELECT * FROM events WHERE day NOT LIKE '&0' AND day NOT LIKE '&' AND type = 1 ORDER BY day ASC, time ASC SELECT * FROM events WHERE (day LIKE '&0' OR day LIKE '&') AND type = 1 ORDER BY day ASC, time ASC SELECT * FROM events WHERE type NOT LIKE 1 ORDER BY type DESC, day ASC, time ASC
Pour chacune, je while bien sur, avec les différentes étapes de traitement des données pour créer les lignes d'un tableau html.

Les étapes sont les mêmes pour les 3 requêtes. Ce qui fait que déjà la page est longue (je parle de quand on l'ouvre dans notepad++ pour travailler dessus) mais surtout que la moindre modif d'étape est à faire 3 fois alors qu'il serait plus pratique de factoriser le tout .

La question (car il faut bien y venir lol) : Est-il possible et si oui par quel moyen, de cumuler les 3 requêtes pour n'avoir plus qu'un while ?
Genre affiche les résultats pour

Code : Tout sélectionner

SELECT * FROM events WHERE day NOT LIKE '&0' AND day NOT LIKE '&' AND type = 1 ORDER BY day ASC, time ASC puis SELECT * FROM events WHERE (day LIKE '&0' OR day LIKE '&') AND type = 1 ORDER BY day ASC, time ASC puis SELECT * FROM events WHERE type NOT LIKE 1 ORDER BY type DESC, day ASC, time ASC
J'ai bien essayé avec UNION mais le serveur m'a insulté :P

Un tite idée pour le canard ? :oops:

Merki et bonne fin de weekend :)
Couin