SELECT ... les 3 dernières entrées selon un critère

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 : SELECT ... les 3 dernières entrées selon un critère

Re: SELECT ... les 3 dernières entrées selon un critère

par yoann38 » 02 sept. 2016, 07:14

Personne à une idée ? svp

Re: SELECT ... les 3 dernières entrées selon un critère

par yoann38 » 30 août 2016, 16:20

Non en fait ce que je souhaite.
C'est récupérer les 3 dernières entrée de chaque id_type_loisirs.

Donc en fait je but sur le GROUP BY et le ORDER BY

Donc je pensé à ca :
SELECT * FROM `loisirs` JOIN `regions` ON `regions`.`region_id` = `loisirs`.`id_region` WHERE `loisirs`.`date_fin_sortie` > NOW() AND `loisirs`.`valide` = 1 AND `regions`.`url` = "rhone-alpes" GROUP BY id_type_loisirs ORDER BY `loisirs`.`date_debut_sortie` ASC LIMIT 0, 15
Le problème c'est que ça me selectionne que la première entrée.
Mois je souhaite les 3 dernières entrées pour chaque type

Le problème vient du ORDER Apparament car si je l'enleve certe je ne récupère qu'une seule entrée mais ce sont bien les dernières entrées:
SELECT * FROM `loisirs` JOIN `regions` ON `regions`.`region_id` = `loisirs`.`id_region` WHERE `loisirs`.`date_fin_sortie` > NOW() AND `loisirs`.`valide` = 1 AND `regions`.`url` = "rhone-alpes" ORDER BY `loisirs`.`id_loisirs` DESC LIMIT 0, 15

Re: SELECT ... les 3 dernières entrées selon un critère

par Ryle » 30 août 2016, 10:50

Bonjour,

Je ne pense pas qu'il y ait de solution simple dans la mesure où tu as 3 critères de regroupement différents. Pour les 3 derniers de chaque région tu peux t'en sortir avec une jointure sur la même table, mais dans ton cas, je pense que la solution est de faire des unions entre chaque requête (loisirs par régions, loisirs par départements et loisirs par villes)
SELECT ... FROM ... 
UNION
SELECT ... FROM ... 
UNION
SELECT ... FROM ...

SELECT ... les 3 dernières entrées selon un critère

par yoann38 » 29 août 2016, 18:14

Salut à tous.
Voilà j'ai un code fonctionnel mais je souhaite testé quelque choses.
J'aimerais récupéré les 3 dernières entrées de ma colonne loisirs selon la région, ville, ou département ....

Donc actuellement mon code permet de récupèrer les dernières entrées selon ville, région ou département mais ça se corse dans le sens ou je souhaite récupèrer les dernières entrées de chaque catégories de loisirs ... et le je suis bloqué.

Pour information ma colonne dans la qu'elle je classe mes loisirs se nomme genre_loisirs

Donc actuellement nous avons:
$sql = "SELECT * FROM `loisirs`  JOIN `regions` ON `regions`.`region_id` = `loisirs`.`id_region` WHERE `loisirs`.`date_fin_sortie` > NOW() AND `loisirs`.`valide` = 1";
$sql .= !empty($_REQUEST['region']) ? ' AND `regions`.`url` = "'.$_REQUEST['region'].'"' : NULL;
$sql .= !empty($_REQUEST['departement']) ? ' AND `loisirs`.`id_departements` = '.$_REQUEST['departement'] : NULL;
$sql .= !empty($_REQUEST['loisir']) ? ' AND `loisirs`.`genre_loisir` = "'.$_REQUEST['loisir'].'"' : NULL;

$sql .= !empty($du) && !empty($au) ? " AND (DATE_FORMAT(`loisirs`.`date_debut_sortie`, '%Y-%m-%d') <= '".$du."' AND DATE_FORMAT(`loisirs`.`date_fin_sortie`, '%Y-%m-%d') >= '".$au."')" : NULL;
  	
// Recherche par ville
if(!empty($_REQUEST['ville'])) {
     $sql .= ' AND loisirs.city = \''. getRealValue($_REQUEST['ville']). '\'';
     }
$sql .= " ORDER BY `loisirs`.`date_debut_sortie` ASC LIMIT ".intval(($page-1)*$parPage).", ".$parPage;
// On affiche ainsi les dernires résultat selon région, ville, département ...
$req = $bdd->query($sql);
Merci pour le coup de main ;)