PB avec une requete SQL

Par nicolastaf, il y a 8 ans


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

5 réponses

G1.3, il y a 8 ans

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 :)

nicolastaf, il y a 8 ans

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...

G1.3, il y a 8 ans

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

nicolastaf, il y a 8 ans

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)']

nicolastaf, il y a 8 ans

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)']