Aller au contenu

récupérer un enregistrement unique dans une table


Sujets conseillés

Posté (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é par Boumbadaboum
Posté

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?

Posté (modifié)

ton code ne fonctionne pas: il faut que tu executes la requete avant d'essayer de lire le resultat : mysql_query

:blush:

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é par Boumbadaboum
Posté

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

Posté

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

Posté (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! :fete::fou:

Quand je suis arrivé, il n'y avait que le message de départ!

Entretemps, 5 réponses! :rolleyes:

Vive le Hub!

Modifié par bigornot
Posté (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é par snwoman49
Posté

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])=?

Posté (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 B)

nan je rigole c'est vrai que c'est bien le Hub !

Modifié par Boumbadaboum
Posté
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

Posté (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é par Boumbadaboum
Posté

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.

Posté (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 ? :huh: )

A votre avis ? quelqu'un m'explique ?

Modifié par Boumbadaboum
Posté

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.

Posté

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.

Posté

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

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...