Compter dans une base de donnée

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 : Compter dans une base de donnée

Re: Compter dans une base de donnée

par JoIsland » 02 janv. 2012, 11:51

Merci ;)

Re: Compter dans une base de donnée

par xTG » 30 déc. 2011, 16:57

Le GROUP BY doit se trouver après le WHERE et avant le ORDER BY. ;)
http://dev.mysql.com/doc/refman/5.0/fr/select.html

Re: Compter dans une base de donnée

par JoIsland » 30 déc. 2011, 14:48

Quand je retire WHERE order_id='$entity' ORDER BY item_id DESC de ma requête , tous fonctionne et les chiffres donnée m'on l'air plus que correct et déjà plus cohérent qu'avant , mais il m'affiche tous les articles , hors ma première boucle me sert à donné l'id de tous les articles qui sont "complete" pour ne pas avoir les commandes non payé donc pas prise en compte . qu'est-ce qui merde sur WHERE order_id='$entity' ORDER BY item_id DESC ??


Voici la structure de la table pour le champ order_id :

Colonne Type Interclassement Attributs Null Défaut Extra Action
order_id int(10) UNSIGNED Non 0

Re: Compter dans une base de donnée

par JoIsland » 30 déc. 2011, 14:03

Voici l'erreur qu'il me retourne :

Erreur SQL !
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE order_id='7997' ORDER BY item_id DESC' at line 1

Alors ce qui merde c'est
order_id='$entity' 
les guillemets ?

Voici ma requête php entière à ce jour :
<?php
$sales_best = mysql_query("SELECT * FROM sales_flat_order WHERE status='complete' ORDER BY entity_id DESC");
while ($donnees = mysql_fetch_array($sales_best) )
{
$entity = $donnees['entity_id'];
$total_item = $donnees['total_item_count'];

$sales_best2 = mysql_query("SELECT *, COUNT(name) AS nb FROM sales_flat_order_item GROUP BY name WHERE order_id='$entity' ORDER BY item_id DESC") or die('Erreur SQL !<br />'. mysql_error().'<br />');
$nb = mysql_num_rows($sales_best2);
while ($donnees = mysql_fetch_array($sales_best2)) 
{
$product = $donnees['product_id'];
$type = $donnees['product_type'];
$sku = $donnees['sku'];
$name = $donnees['name'];
$count = $count + 1;
$idd = $donnees['item_id'];
$nn = $donnees['nb'];

if ($type == "configurable") {
if ($nn > 25) {

echo "$name --> acheté : (x$nn) --> numéro : $count --> id : $idd --> SKU : $sku<br /><br />";
   } 
  }
 }
}

?>

Re: Compter dans une base de donnée

par xTG » 30 déc. 2011, 13:45

S'il ne te retourne rien du tout avec le GROUP BY c'est surement car il génère une erreur...
Car c'est uniquement le clause WHERE qui se charge de sélectionner ou non les n-uplets à retourner.
Montres nous ta requête actuel telle qu'elle a été modifiée.
Et utilises mysql_error() après le mysql_query() pour voir les erreurs retournées.

Re: Compter dans une base de donnée

par JoIsland » 30 déc. 2011, 13:29

Et avec le GROUP BY name , il ne me renvoie rien du tout

Re: Compter dans une base de donnée

par JoIsland » 30 déc. 2011, 13:22

Je te donne un exemple qu'il me renvoie (à savoir qu'il ma retourné des millions de ligne)
array(158) { [0]=> string(5) "35051" ["item_id"]=> string(5) "35051" [1]=> string(4) "7997" ["order_id"]=> string(4) "7997" [2]=> NULL ["parent_item_id"]=> NULL [3]=> string(5) "83695" ["quote_item_id"]=> string(5) "83695" [4]=> string(1) "1" ["store_id"]=> string(1) "1" [5]=> string(19) "2011-12-30 07:18:55" ["created_at"]=> string(19) "2011-12-30 07:18:55" [6]=> string(19) "2011-12-30 08:24:04" ["updated_at"]=> string(19) "2011-12-30 08:24:04" [7]=> string(4) "4271" ["product_id"]=> string(4) "4271" [8]=> string(12) "configurable"

Re: Compter dans une base de donnée

par JoIsland » 30 déc. 2011, 13:08

Le plus étonnant c'est que les infos qu'il me renvoie quand je fais une recherche dans mon PhpMyAdmin il n'éxiste pas :shock: genre l'article en question n’existe pas , je l'ai ai tous essayé , il n'en retrouve aucun ...

Re: Compter dans une base de donnée

par xTG » 30 déc. 2011, 13:06

Mes questions c'était un OU entre les deux. :roll:
Car tu ne peux avoir la fin du script avec aucun affichage et en même temps une boucle infinie et un message de timeout...

Que retournes mysql_num_rows() après le mysql_query() ? (ça compte le nombre de n-uplet retourné)
Mets un var_dump($donnees) dans ta boucle while pour voir ce qu'il te récupère pour chaque n-uplet.

Re: Compter dans une base de donnée

par JoIsland » 30 déc. 2011, 12:45

En gros , je souhaite :

Que ma requête récupère les infos de ma bdd à savoir que :

|id| |name| (etc..)
1 article 1
2 article 2
3 article 1
4 article 2


Il existe dans le champ name plusieurs article qui comporte exactement le même nom , je souhaite qu'il m'affiche qu'une seul le produit si il est doublé , puis il récupère le nombre de fois qu'il la trouvé , pour avoir un affiche de ce style :

Article 1 (x13)
Article 2 (x36)

Etc... :lol:

Re: Compter dans une base de donnée

par JoIsland » 30 déc. 2011, 12:38

Ok je viens de retester avec le
$nn = $donnees['nb'];
et avec le GROUP BY name , sa me retourne rien comme via ma requête PHPmyadmin , maintenant j'aimerai savoir pourquoi il me retourne aucune valeur ? :?

Re: Compter dans une base de donnée

par JoIsland » 30 déc. 2011, 12:29

Elle mouline c'est à dire ? Elle tourne à l'infinie sans jamais rien afficher ? => timeout ?

Oui .
Elle tourne mais n'affiche rien ? => testes la requête sous phpmyadmin pour voir ce qu'elle retourne.
Elle me retourne "Aucune ligne"
Et aussi :
$nn = mysql_result($sales_best2,0,"nb");
Là en fait tu demandes la récupération de nb du premier n-uplet retourné. Je suppose que ce n'est pas ce que tu souhaites mais bel et bien le nb pour chaque n-uplet :
$nn = $donnees['nb'];
J'ai tester et sa retourne la même chose ^^

je ne connais pas vraiment la fonctionnalité de COUNT j'ai donc fais quelque test et avec
$nn = mysql_result($sales_best2,0,"nb");
sa me retournai des valeurs qui m'on l'air à peut prêt cohérente , mais comme je ne suis absolument pas sûr des résultats , je demande si j'ai bien formuler ma requête , à mon avis non. le GROUP BY name dans phpmyadmin c'est ok mais ne me retourne rien, en PHP je fais la même requête mais j'ai la boucle infinie qu'en penses-tu ?

Re: Compter dans une base de donnée

par xTG » 30 déc. 2011, 12:22

Elle mouline c'est à dire ? Elle tourne à l'infinie sans jamais rien afficher ? => timeout ?
Elle tourne mais n'affiche rien ? => testes la requête sous phpmyadmin pour voir ce qu'elle retourne.

Et aussi :
$nn = mysql_result($sales_best2,0,"nb");
Là en fait tu demandes la récupération de nb du premier n-uplet retourné. Je suppose que ce n'est pas ce que tu souhaites mais bel et bien le nb pour chaque n-uplet :
$nn = $donnees['nb'];

Re: Compter dans une base de donnée

par JoIsland » 30 déc. 2011, 11:53

Salut,

J'ai fais comme tu as dis , maintenant la page mouline et rien . lol , sa me rend fou :shock:

Re: Compter dans une base de donnée

par xTG » 30 déc. 2011, 11:34

En fait la clause ORDER BY doit se trouver après la clause GROUP BY. :)