Bonjour a tous,
Je rencontre un petit probleme j'ai une requete SQL qui fonctionne je souhaiterais l'améliorer si possible mais dépasse mes compétences.
ma requete:
$req = $bdd->getDb()->prepare("
SELECT posts.id as idPost, posts.manufacturer_code, posts.title, posts.content, posts.writer, posts.image, posts.date_post, posts.posted,
posts.menus_id, posts.delivery,posts.price,posts.brand,posts.deadlines,posts.link_shop,posts.availability,posts.guarantee,
admins.id as idAdmin, admins.name, admins.email, admins.password, admins.code_user, admins.role, admins.name_site, admins.url_site, admins.description, admins.logo, admins.siret, admins.address, admins.code_postal, admins.city, admins.catalogue
FROM posts
JOIN admins
ON posts.writer = admins.email
WHERE posted = :visibility
GROUP BY manufacturer_code
ORDER BY date_post ASC
Le regroupement de ma table manufacturer_code se fait bien mais prend par défaut le post le plus récent alors que je souhaiterais avoir un autre post.
Si on fait un AND apres le GROUP BY ca ne fonctionne pas.
Merci de votre aide
C'est bon la solution pour ceux qui souhaiterais la savoir est remplacer posts.price => MIN(posts.price) et da la reporter dans mon foreach et de remplacer $val['price'] => $val['MIN(posts.price)']
Salut
Comment veux tu trier tes posts ? Montre nous ta requête modifée, même si elle pete une erreur, on pourra comprendre ce que je veux comme ça :)
Voici mon modele
// Préparation de la requete
$req = $bdd->getDb()->prepare("
SELECT posts.id as idPost, posts.manufacturer_code, posts.title, posts.content, posts.writer, posts.image, posts.date_post, posts.posted,
posts.menus_id, posts.delivery,posts.price, MIN(posts.price),posts.brand,posts.deadlines,posts.link_shop,posts.availability,posts.guarantee,
admins.id as idAdmin, admins.name, admins.email, admins.password, admins.code_user, admins.role, admins.name_site, admins.url_site, admins.description, admins.logo, admins.siret, admins.address, admins.code_postal, admins.city, admins.catalogue
FROM posts
INNER JOIN menus
INNER JOIN admins
ON menus.id = posts.menus_id
AND posts.writer = admins.email
WHERE posts.menus_id = :menu_id
GROUP BY manufacturer_code
ORDER BY price ASC
");
// Execution de la requête
$req->bindValue(':menu_id', $menu_id,PDO::PARAM_INT);
$req->execute();
$databaseReuslt = $req->fetchAll(PDO::FETCH_ASSOC);
// Préparation du résultat
$result = [];
foreach ($databaseReuslt as $val){
$adminTemp = new Admins($val['idAdmin'], $val['name'], $val['email'], $val['password'], $val['code_user'], $val['role'], $val['name_site'], $val['url_site'], $val['description'], $val['logo'], $val['siret'], $val['address'], $val['code_postal'], $val['city'], $val['catalogue']);
$postTemp = new Posts($val['idPost'], $val['manufacturer_code'], $val['title'], $val['content'],$adminTemp, $val['image'], $val['date_post'], $val['posted'], $val['menus_id'], $val['delivery'], $val['price'], $val['brand'], $val['deadlines'], $val['link_shop'], $val['availability'], $val['guarantee']);
$result[] = $postTemp;
}
return $result;
mon controller:
$posts = Posts::getPostByMenuId($_GET['id']);
pour avoir tous les posts corrspondant a une categorie.
J'ai bien les posts corrsepondants mais ceux qui se regroupe j'aimerai le trier par celui qui aurait le prix le plus bas.
Je viens de tester avec MIN() mais sans resultat...
J'ai un peu de mal à saisir...
Ça ne fonctionne pas avec le ORDER BY price ASC
? Si non, regarde du coté du HAVING
à mettre juste après ton GROUP BY
C'est bon c'est résolu.
Donc c'est bien MIN(posts.price) a la place posts.price puis mon foreach remplacer $val['price'] => $val['MIN(posts.price)']