SELECT champ1 COUNT(*) FROM matable oui mais comment?

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 : SELECT champ1 COUNT(*) FROM matable oui mais comment?

par Snipy » 01 déc. 2007, 14:17

OK merci c'est noté :)
Je reste donc avec mon assoc ;)

Bonne continuation :)

par Hubert Roksor » 01 déc. 2007, 14:08

fetch_row() est marginalement plus rapide que fetch_assoc(), mais la différence se mesure en nanosecondes, il faudrait l'utiliser des millions de fois par page pour que l'utilisateur s'aperçoive de la différence.

par Snipy » 01 déc. 2007, 13:47

oui oui tout à fait c'est ce que je fais le plus souvent.
Mais je parlais en terme de performance, j'imagine que ****_row doit être le plus rapide.
mais à ce que tu en dis cela dit être négligeable :)

par Truc » 01 déc. 2007, 13:19

Mieux vaut utiliser mysql_fetch_row dans la mesure du possible ?
mysql_fetch_assoc() au moins tu peux facilement associer ton champ de la BD avec la variable php.
"userid" c'est plus parlant que "0"

par Snipy » 01 déc. 2007, 12:47

Ok c'est seulement ça donc.
Bah.. je vous remercie :)

Mieux vaut utiliser mysql_fetch_row dans la mesure du possible ?

Bonne journée

par Truc » 01 déc. 2007, 12:29

Suffit de regarder la doc et les exemples. :wink:
$sql = "SELECT userid FROM ...";
...
// indice associatif
$row = mysql_fetch_assoc($result)) 
echo $row["userid"]; 

/*****/
// indice numérique
$row = mysql_fetch_row($result);
echo $row[0];

/*****/
// indice numérique ET associatif
$row = mysql_fetch_array($result); 
echo $row[0];  
echo $row["userid"]; 
Tous les echo affichent la même chose... la valeur de "userid"

par Snipy » 01 déc. 2007, 12:20

merci ;)

Et concernant ma première question?

par AB » 30 nov. 2007, 18:56

Merci pour l'info je ne savais pas que le pointeur était placé sur l'entrée suivante après l'appelle de la fonction mysql_fetch_* ça veut donc dire si on fait appelle à cette fonction 2x sur la même requête SQL la seconde fois la fonction retournera FALSE ?

Merci
bonne soirée :)
Tu as compris :wink:

par Snipy » 30 nov. 2007, 18:35

Merci pour les suppléments d'informations Ryle.

Pour résumé

Suite à ton premier argument sur l'utilisation abusive des mysql_fetch_array() à la place de mysql_fetch_assoc() ou mysql_fetch_rows(). Je le lis souvent essaye en général de mettre assoc().
Mais peux me dire par un exemple si possible la réelle différence des données retournées à travers ses 3 fonctions?

----------------------

Merci pour l'info je ne savais pas que le pointeur était placé sur l'entrée suivante après l'appelle de la fonction mysql_fetch_* ça veut donc dire si on fait appelle à cette fonction 2x sur la même requête SQL la seconde fois la fonction retournera FALSE ?


Merci
bonne soirée :)

par Ryle » 30 nov. 2007, 15:51

Tu peux optimiser encore un chouilla en utilisant mysql_fetch_assoc() ou mysql_fetch_row() (le premier retournant un tableau associatif et le second un tableau indexé) au lieu de mysql_fetch_array() (qui combine les deux et te retourne toutes les infos en double : associées et indexées)
Ca changera absolument rien ici, c'est plus pour pinailler, mais si jamais tu ramenes un jour des enregistrements plus important et plus nombreux, ça peut commencer à jouer :)

Quant au if (!empty($vente)) c'est effectivement mieux, mais surtout, si tu avais un enregistrement dans ta requête, le fait d'avoir fait appel au mysql_fetch_* va placer le pointeur sur l'enregistrement d'après (qui n'existe donc pas) et un second appel à la fonction te retournerait la valeur FALSE. Ceci dit, au lieu d'un empty(), tu peux tout aussi bien coller un "else" au if précédent :)
if (mysql_fetch_array($sql)) { // si un enregistrement au moins a été trouvé
  ...  
}
else { // sinon 
  ...
}

par Snipy » 30 nov. 2007, 12:53

ok !
Evidemment..

Donc je fais
<?php $sql = mysql_query("SELECT date_fin  FROM transferts WHERE id_joueur='".$fiche."' AND id_equipe_a ='0'");

        if (mysql_fetch_array($sql))
        {
        $vente='<p class="erreur">Le joueur <strong>'.$liste_joueurs2['prenom'].' '.$liste_joueurs2['nom'].' </strong> est déja sur la liste des transferts, votre demande a donc été annulée. </p>';
        }
if (!empty($vente)) // je pourrais refaire ici  if (mysql_fetch_array($sql)) mais faire un mysql_fetch_array ne prend t'il pas plus de ressources ?
    {

    echo 'Ce joueur est sur le marché des transferts jusqu\'au '.date('d/m/Y',$data1['date_fin']);
    }
Merci d'avoir répondu.

Bonne journée

par d0m » 30 nov. 2007, 09:28

tu te compliques la vie. Pas besoin de faire un comptage, tu executes simplement ta requête.
Ensuite soit :
- mysql_fetch_array() renvoie false => aucune entrée correspondante (équivalent à count égal à 0)
- mysql_fetch_array() renvoie un tableau résultat => tu récupères ton champ

SELECT champ1 COUNT(*) FROM matable oui mais comment?

par Snipy » 29 nov. 2007, 20:58

Bonsoir, me voici confronter à un problème simple...
COmment faire fonctionner ma requete et l'optimiser...

J'aimerais d'une part compter le nombre d'entrée et si il y en a une récupérer un des champ de cette entrée (car si il y en a une il y en a une seule)

Voici ce que j'avais fait (c'est tout moche) je mets juste les portions de scripts utiles :)
 <?php $sql = mysql_query("SELECT date_fin COUNT(*) AS nb_joueurs FROM transferts WHERE id_joueur='".$fiche."' AND id_equipe_a ='0'");

		if (mysql_result($sql, 0, 'nb_joueurs') != 0)
		{
		$vente='<p class="erreur">Le joueur <strong>'.$liste_joueurs2['prenom'].' '.$liste_joueurs2['nom'].' </strong> est déja sur la liste des transferts, votre demande a donc été annulée. </p>';
		}
plus loin
if (!empty($vente))
	{
	mysql_fetch_array($sql);
	echo 'Ce joueur est sur le marché des transferts jusqu\'au '.date('d/m/Y',$data1['date_fin']);
	}
Merci d'avance de m'éclairer :)

Bonne soirée

et question à part, qu'elle est la meilleur fonction pour récuperer les infos d'une unique entrée ? Il doit y avoir moins gourmand que mysql_fetch_array and co non?

Code : Tout sélectionner

CREATE TABLE `transferts` ( `id` int(11) NOT NULL auto_increment, `id_joueur` int(11) NOT NULL, `id_equipe_v` int(11) NOT NULL, `id_equipe_a` int(11) NOT NULL, `date_debut` int(11) NOT NULL, `date_fin` int(11) NOT NULL, `prix` int(11) NOT NULL, UNIQUE KEY `id` (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=2 ; --