Boumbadaboum Posté 14 Août 2005 Posté 14 Août 2005 (modifié) Bonjour, Je ne parviens pas à récupérer un et un seul enregistrement dans une table sans effectuer un mysql_fetch_array précédé d'un LIMIT 0.1 dans la requête SQL. J'utilise ça ( j'ai essayé plein de variantes avant de venir) : $afficheCateg="SELECT categorie,liens FROM table WHERE categorie='$variable' ";$Categ = mysql_fetch_array($afficheCateg); echo $Categ["categorie"][0]; Je l'ai pas inventé je me suis servi de ce code (que j'ai essayé tel quel) fourni par Boo2M0rs0 à l'occasion d'un autre post.: la requête SQLSELECT sum(nbrLiens) FROM definitions Renvera toujours une seule ligne de résultat. Alors pourquoi utilises-tu une boucle while ? Dans cette situation on pourrai écrire:$RLiens = mysql_fetch_array($resultatLien);echo "$Rliens[0] liens"; Donc je ne veux récupérer que la catégorie qui correspond à la variable (des dizaines de tuples ont cette catégorie, je ne veux la récupérer qu'une fois pour l'afficher c'est tout). ça vous dis quoi ? Modifié 14 Août 2005 par Boumbadaboum
rportal Posté 14 Août 2005 Posté 14 Août 2005 2 remarques: - 1) ton code ne fonctionne pas: il faut que tu executes la requete avant d'essayer de lire le resultat : mysql_query - 2) l'exemple que tu nous donnes pour renvoyer une seule ligne utilise la fonction sum de SQL qui est une fonction de groupe et qui calcule la somme des valeurs d'une colonne donc ne renvoie qu'un seul resultat. Dans ton cas tu ne veux pas faire d'aggregation de donnees, tu veux selectionner la premiere ligne de ta base de donnees et a priori avec mysql tu ne peux le faire qu'avec LIMIT 0, 1 ou est le probleme avec LIMIT?
Boumbadaboum Posté 14 Août 2005 Auteur Posté 14 Août 2005 (modifié) ton code ne fonctionne pas: il faut que tu executes la requete avant d'essayer de lire le resultat : mysql_query ou est le probleme avec LIMIT? Pas de problème avec LIMIT il ne m'a rien fait, c'est de MYSQL_FETCH_ARRAY dont je voudrais me passer. Modifié 14 Août 2005 par Boumbadaboum
snwoman49 Posté 14 Août 2005 Posté 14 Août 2005 En fet tu veux récupèrer le lien X qui correspond à la catégorie Y. ?? Ou tu veux récupèrer toutes les valeurs quand le nom de la catégorie= X. Car j'avoue ne pas avoir trop compris ta question,donc je ne peux te fournir de réponses.
Boumbadaboum Posté 14 Août 2005 Auteur Posté 14 Août 2005 J'ai 50 enregistrement qui ont un lien en commun et une categorie égale à la variable. Je me fiche des 50 enregistrement je ne veux récupérer qu'un lien et la categorie d'un seul tuple (puisque les liens et les categories sont les mêmes partout).
bigornot Posté 14 Août 2005 Posté 14 Août 2005 (modifié) Je peux te conseiller mysql_result, mais ça ne t'économiserait même pas une ligne! Mais si (je me réfère au 1e exemple) la requete ne donne qu'un seul résultat (suite au WHERE), normalement, un mysql_result ou mysql_fetch_array ($fetch[0]) devrait marcher. //EDIT : Pfouu ya du monde ici! Quand je suis arrivé, il n'y avait que le message de départ! Entretemps, 5 réponses! Vive le Hub! Modifié 14 Août 2005 par bigornot
snwoman49 Posté 14 Août 2005 Posté 14 Août 2005 (modifié) D'accord alors tu faits ca: $sql ="SELECT* FROM matable_tbl WHERE categoerie='$categorie' ORDER BY 'id' DESC LIMIT 0,1"; $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); $val = mysql_fetch_assoc($req);echo "$val['categorie']"; Logiquement ca devrait répondre à tes souhaits Modifié 14 Août 2005 par snwoman49
Boumbadaboum Posté 14 Août 2005 Auteur Posté 14 Août 2005 Donc l'instruction PHP au complet donnerait (ps: instruction ou fonction?) : $req="ma requete" $bob=mysql_query($req) $req2=mysql_fetch_array($bob[0]) echo $req2 c'est ça? mais pour afficher les champs liens et categories je fais comment avec mon mysql_fetch_array($bob[o])=?
Boumbadaboum Posté 14 Août 2005 Auteur Posté 14 Août 2005 (modifié) //EDIT : Pfouu ya du monde ici! Quand je suis arrivé, il n'y avait que le message de départ!Entretemps, 5 réponses! Vive le Hub! bah ouais c'est un post à boumbadaboum nan je rigole c'est vrai que c'est bien le Hub ! Modifié 14 Août 2005 par Boumbadaboum
rportal Posté 14 Août 2005 Posté 14 Août 2005 Donc l'instruction PHP au complet donnerait (ps: instruction ou fonction?) : je dirais le code Sinon je pense que $req2=mysql_fetch_array($bob)echo $req2[0] serait mieux
Boumbadaboum Posté 14 Août 2005 Auteur Posté 14 Août 2005 (modifié) j'essaie le code : D'accord alors tu faits ca:CODE$sql ="SELECT* FROM matable_tbl WHERE categoerie='$categorie' ORDER BY 'id' DESC LIMIT 0,1";$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); $val = mysql_fetch_assoc($req);echo "$val['categorie']"; Mais à quoi sert le LIMIT 0.1 justement? Pour limiter le temps de la requête? Parce que là c'est la version longue, je pouvais aussi bien faire un mysql_fetch-array avec une boucle while si c'est pour uiliser le LIMIT 0.1. Idem pourquoi ORDER BY ? De toute façon je n'affiche qu'un résultat je me fiche du quel en plus. non? Modifié 14 Août 2005 par Boumbadaboum
rportal Posté 14 Août 2005 Posté 14 Août 2005 Tu peux enlever le ORDER BY si tu veux. ca ne sert à rien de faire un tri dans ton cas. Le LIMIT 0,1 sert à dire à MySQL que tu ne désires que la première ligne et pas le reste. Tu evites limite donc au necessaire l'utilisation des ressources : je veux utiliser un resultat, mysql ne t'envoies qu'un resultat. Attention je mettrais plutot if($val = mysql_fetch_assoc($req)){echo "{$val['categorie']}";} on ne sait jamais, si ta requete ne renvoie rien, ca evite une erreur.
Boumbadaboum Posté 14 Août 2005 Auteur Posté 14 Août 2005 (modifié) Une question qui change un peu de sujet mais je vais pas ouvrir un post que pour ça : Pour récupérer ces catégories et ces liens je dois balayer plusieurs centaines de tuples. Dois-je alors placer un index sur les champs catégories et liens ? En fait je n'ai pas trop compris malgré mes lectures à quoi servent les index. J'ai déjà un id auto-increment dans la table, donc un index est automatiquement créé d'après ce que j'ai lu, mais ils disent d'en mettre sur tous les champs susceptible de faire l'objet d'une requête (partout alors ? ) A votre avis ? quelqu'un m'explique ? Modifié 14 Août 2005 par Boumbadaboum
rportal Posté 14 Août 2005 Posté 14 Août 2005 en gros, un index c'est comme un annuaire: cela permet de faire des recherches plus rapidement. Cela est utile quand une table commence a avoir quelques dizaines de milliers de lignes et que ta table est souvent utilisée. La création des index fait partie de l'optimisation d'une base de données. Il faut pour cela avoir fixer le système qui utilise la base (ici ton site) et ensuite te servir d'outils d'analyse de base de donnees pour savoir si des index sont necessaies.
Boumbadaboum Posté 14 Août 2005 Auteur Posté 14 Août 2005 (modifié) Bon mais si j'en mettais un sur le champs catégorie mettons, ça grillerais tout le world wide web ? Modifié 14 Août 2005 par Boumbadaboum
rportal Posté 14 Août 2005 Posté 14 Août 2005 ca ne servirait pas a grand chose pour l'instant. Attends d'avoir fini ton code et que ton audience se fasse pour voir s'il est necessaire de faire un index.
Compte supprimé Posté 14 Août 2005 Posté 14 Août 2005 Il faut mettre un index sur les champs qui varient (le champ id par exemple). Si tu as 10 catégories différentes, il est inutile de mettre un index dessus (ce serait comme avoir un index pour un livre de 10 pages...)
Boumbadaboum Posté 14 Août 2005 Auteur Posté 14 Août 2005 quand tu dis "un index sur les champs qui varient" cela signifie "un index sur les champs pour lesquels de nouvelles valeurs sont insérées fréquemment" c'est ça ?
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant