Jointure et Rand()

Résolu/Fermé
ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 - 25 nov. 2021 à 20:14
ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 - 28 nov. 2021 à 18:03
Bonjour à tous,
Je suis en train de me créer un outil qui est supposé me suggérer des recettes de cuisine.
J'ai ces 3 table:
CREATE TABLE `categories_recettes` (
  `id` int(5) NOT NULL,
  `categorie` varchar(100) COLLATE latin1_general_ci NOT NULL,
  `master` int(1) NOT NULL DEFAULT '0',
  `type_cat` int(3) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;


CREATE TABLE `cat_recipe` (
  `idcat` int(5) NOT NULL,
  `idrecipe` int(5) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

CREATE TABLE `recettes` (
  `id` int(10) NOT NULL,
  `titre` varchar(500) COLLATE latin1_general_ci NOT NULL,
  `url` varchar(500) COLLATE latin1_general_ci NOT NULL,
  `img` varchar(1500) COLLATE latin1_general_ci NOT NULL,
  `note` varchar(10) COLLATE latin1_general_ci NOT NULL,
  `recette` varchar(5000) COLLATE latin1_general_ci NOT NULL,
  `img_updated` int(1) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;


Mon pb c'est que les recettes ont été enregistrées par lots (100 desserts puis 40 plats principaux puis 200 entrées etc.) donc quand je veux afficher les 10 dernières recettes enregistrées par exemple, ça me sort uniquement des plats ou uniquement des desserts etc.
Je ne trouve pas quelle requête faire pour que ça me sorte les X dernières recettes enregistrées ET que les catégories soient dans un ordre aléatoire, pour avoir un dessert, puis une soupe, puis un poisson etc. et que ces recettes soient les dernières recettes enregistrées de la catégorie en question.

Quelqu'un peut m'aider svp ?



Configuration: Macintosh / Firefox 94.0

5 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
25 nov. 2021 à 20:19
Bonjour,

Essaye un truc du genre

SELECT * 
FROM cat_recipe CR
LEFT JOIN recettes R  ON R.id = CR.idrecipe
ORDER BY RAND()
LIMIT 10

0
ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 2
Modifié le 25 nov. 2021 à 20:27
Hello Jordane,
Le pb c'est que si je fais ça, ça ne me sortira pas les dernières recettes enregistrées or c'est un critère incontournable. Je viens d'ajouter des recettes de Noël, je ne veux pas que ça me sorte des gaspachos...
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
28 nov. 2021 à 11:00
bonjour,
que comprends-tu par "aléatoire"?
peux-tu peut-être donner un exemple de quelque-chose d'aléatoire?
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
28 nov. 2021 à 11:09
ne confonds-tu pas rand() et rank()?
0
ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 2 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
28 nov. 2021 à 16:31
Aléatoire comme un lancer de dés.
Mais a priori c'est ok, j'ai ce que je voulais avec :

SELECT idcat, R.id, titre FROM
(SELECT * FROM `recettes` ORDER BY id DESC LIMIT 0,1000) R
LEFT JOIN
(SELECT * FROM cat_recipe ORDER BY RAND()) CR
ON CR.idrecipe=R.id
ORDER BY RAND()
LIMIT 10
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023
28 nov. 2021 à 16:37
peux-tu alors marquer la discussion comme résolue?
0
ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 2 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
28 nov. 2021 à 18:02
oui, pardon ;)
0
ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 2
Modifié le 25 nov. 2021 à 20:36
J'ai essayé de faire

SELECT * FROM
(SELECT * FROM cat_recipe ORDER BY Rand()) CAT
LEFT JOIN
(SELECT * FROM recettes ORDER BY id DESC) REC
ON REC.id = CAT.idrecipe

mais quand j'actualise, j'ai toujours exactement les mêmes résultats et les recettes sont toujours par lots
0
ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 2
27 nov. 2021 à 19:34
up
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 2
28 nov. 2021 à 18:03
Merci ! :-)
0