requete calcul sql

Eléphanteau du PHP | 43 Messages

29 janv. 2012, 14:47

Bonjour à tous,

Désolé de solliciter une fois de plus votre aide, mais je suis bloqué pour la conception de mon site ;).

Je vous explique ce que j'essaie de faire :
J'ai des vignettes (catégories de tuto, after effects, photoshop...). En dessous il y a marqué le nom de la catégorie par exemple : Photoshop. Ce que je cherche a faire c'est un calcul dans la base de donnée afin que si j'ai 7 tutos dans la catégorie photoshop que sous la vignette il y ait écrit "Photoshop (7)".

Du coup j'ai crée 3 tables :

users : avec l'id,username,passeword...
categorie : photoshop, after effects... avec deux champs : id et nom_categorie
tutoriel : avec neuf champs : id, titre, description, video, durée,categorie_id,prix,source,membre_id.

Alors ma question, comment faire pour récupérer le nombre de tutos ayant la catégorie (exemple) photoshop, et ainsi l'afficher sur ma page?

En vous remerciant beaucoup de bien vouloir m'aider

ViPHP
xTG
ViPHP | 7331 Messages

29 janv. 2012, 15:49

Tu commences par une jointure entre les tables categorie et tutoriel.
Puis en clause WHERE l'id correspondant à ce que tu veux compter (l'id du n-uplet photoshop par exemple).
Et enfin avec la fonction COUNT() dans la clause SELECT tu comptes le nombre de n-uplets renvoyés.

Eléphanteau du PHP | 43 Messages

29 janv. 2012, 20:29

Merci, mais j'ai du me rater dans quelque chose (apprenant le pdo et en général le php).

Voici ce que j'ai fait et cela ne marche pas. Tu dois surement voir le pourquoi :
      <?php
      $req = $bdd->prepare('SELECT * FROM tutoriel JOIN categorie ON categorie.id = tutoriel.categorie_id');
      $req->execute();
      while($data = $req->fetch(PDO::FETCH_OBJ)):
	  
	  $sql = mysql_query("SELECT COUNT(*) WHERE photoshop");
	  
	  
	  ?>
 
      
      <p>Photoshop : (<?php echo $sql?></p>)
      <p>Categorie : <?php echo $data->nom_categorie;?></p>

      
      <?php
      endwhile;
      ?>
Voici les tables :

http://img809.imageshack.us/img809/6564/categorie.png
http://img840.imageshack.us/img840/4593/tutok.jpg

Eléphanteau du PHP | 49 Messages

29 janv. 2012, 20:44

Salut,
'SELECT COUNT(*) WHERE photoshop' => il manque le nom de ta colonne après le where

Damb341
Invité n'ayant pas de compte PHPfrance

29 janv. 2012, 20:58

Peux tu me dire s il te plait comment técrirais la requete?

ViPHP
xTG
ViPHP | 7331 Messages

29 janv. 2012, 21:10


Eléphanteau du PHP | 49 Messages

29 janv. 2012, 23:26

Pour que ça fonctionne il faudrait faire 'SELECT COUNT(*) FROM categorie WHERE nom_categorie=\'photoshop\''
Mais ce n'est absolument pas la bonne méthode. :non: :non: :non:

il faut que tu récupères l'id et que tu fasse ta requête avec :
'SELECT COUNT(*) FROM categorie WHERE id=3'

Suis le lien de XTG ;-)

Eléphant du PHP | 60 Messages

29 janv. 2012, 23:50

Bonjour,

pourquoi le faire en plusieurs requêtes alors qu'une seule suffirait ?

Par exemple avec quelque chose de la forme
SELECT categorie.id as id, categorie.nom_categorie as categorie, count(tutoriel.id) as total
FROM tutoriel JOIN categorie ON categeorie.id = tutoriel.categorie_id
group by categorie.id
"La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information"
Albert Einstein.

Eléphanteau du PHP | 43 Messages

31 janv. 2012, 17:15

Merci beaucoup. J'ai bien lu le lien que donné xTG, mais en essayant d'adapter, cela n'a rien donné :( desesperent...
      <?php
	  
	  
	  try {

    $sql = 'SELECT tutoriel.id,titre,categorie_id, categorie.nom_categorie FROM tutoriel LEFT JOIN categorie ON tutoriel.categorie_id=categorie.id WHERE categorie.nom_categorie="After Effects"';
    $result = $bdd->query($sql);
    $columns = $result->fetch();
    $nb = $columns['categorie_nom'];
    
    echo 'Il y a '.$nb.' enregistrement(s).';

} catch(PDOException $e) {
    echo 'Erreur PDO : '.$e->getMessage();
}

	  
	  ?>

Eléphant du PHP | 60 Messages

01 févr. 2012, 00:25

@Damb34
[...]mais en essayant d'adapter, cela n'a rien donné[...]
et c'est bien là le problème car manifestement tu ne comprends pas bien ce que tu fais.

Ce que je te conseille c'est d'exécuter les requêtes déjà via l'interface dont tu te sers pour afficher les éléments de ta base de données (phpmyadmin ?)

Exécuter par exemple ta requête
SELECT tutoriel.id,titre,categorie_id, categorie.nom_categorie FROM tutoriel LEFT JOIN categorie ON tutoriel.categorie_id=categorie.id WHERE categorie.nom_categorie="After Effects"
, voir ce qu'elle retourne, et la corriger s'il faut.
Je te rappelle au paasage que je t'ai fait une suggestion plus haut, l'as-tu essayée ?

En tout cas il me semble nécessaire que tu "joues" un peu avec les requêtes avant de t'expliquer quoi que ce soit d'autre que tu risquerais de toute façon de ne pas comprendre.
Et je penses que d'autres ont déjà essayé de te le faire comprendre (je pense à xTG notamment)
"La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information"
Albert Einstein.