Affichage requete

Résolu/Fermé
caro__48 Messages postés 242 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 18 mai 2017 - Modifié le 29 mars 2017 à 11:26
diablo13800 Messages postés 2890 Date d'inscription jeudi 2 juillet 2015 Statut Membre Dernière intervention 16 février 2024 - 29 mars 2017 à 14:08
Bonjour,

Dans une requête, peut-on demander d'afficher un seul résultat?

Par exemple:

$requete1=mysql_query("
select
*
FROM historique_commandes
Order by logo ASC") or die (mysql_error());

echo ('<table id="t2" border="0" cellpadding="5">
<tr>
<td>
Fournisseurs / Marques:

</tr>');

while ($val = mysql_fetch_object($requete1))
{


?>

<tr>
<td>
<img src="Logos_marques_fournisseurs/<?php echo $val->logo;?>.jpg">
</td>

</tr>
<?php

}
echo('</form> </table>');

La il m'affiche autant le logo que ce qu'il trouve de ligne (cad: si j'ai 8 lignes avec le logo "test1", il affiche 8 fois le logo "test1" dans mon tableau)
Peux t on l'afficher q'une fois?
Ou je suis obligée de faire une autre table avec mes logos uniquement et une jointure entre les deux??

Merci d'avance pour votre aide :)



l'informatique est né pour nous faire réfléchir....

3 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
Modifié le 29 mars 2017 à 13:51
Bonjour,

Pour éliminer tous les doublons dans une requête SQL, il faut utiliser la clause DISTINCT dans le SELECT.
Par ailleurs, dans ton cas, tu ne veux que le logo mais tu demandes tous les champs (*), ce qui n'est pas considéré comme une bonne pratique (plus de flux réseau, et, typiquement dans le cas présent, ça empêche d'utiliser DISTINCT puisqu'il agirait sur la ligne entière).

Utilise donc la requête suivante :
SELECT DISTINCT logo
FROM historique_commandes
ORDER BY logo ASC

Xavier

PS : ceci étant dit, la vraie bonne solution comme tu le fais remarquer, c'est d'utiliser une table dédiée aux logos, avec une jointure dans historique_commandes. Tu as 5000 lignes, mais sans doute beaucoup moins de logos ; là, ton serveur SQL est obligé de parcourir toutes les commandes, de vérifier si les logos sont bien distincts... Tu comprends bien que ça lui fait faire plus de travail.
1
caro__48 Messages postés 242 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 18 mai 2017 61
29 mars 2017 à 14:01
Merci beaucoup pour votre aide!!

Effectivement cela marche. J'ai mis le * pour faire des test en local rapidement mais je sais que ce n'est pas top du tout :)

Je pense qu'au final quand j'aurai plus de temps, je ferais 2 tables. Le travail est quand même plus propre.

Merci de votre aide.
0
diablo13800 Messages postés 2890 Date d'inscription jeudi 2 juillet 2015 Statut Membre Dernière intervention 16 février 2024 1 844
29 mars 2017 à 14:08
Haha la pause de midi qui faisait que je répondais pas .... J'allais justement dire le distinct :) La même concernant le *

Mais simple question Reivax962 une colonne sur 5000 pour le distinct c'est pas si ralentissant si?
0
diablo13800 Messages postés 2890 Date d'inscription jeudi 2 juillet 2015 Statut Membre Dernière intervention 16 février 2024 1 844
Modifié le 29 mars 2017 à 11:44
Suivant votre moteur de base Deux choix s'offre a vous , le top 1 ( qui ne semble pas marcher.) et le limit,

Essayer avec le limit comme ceci:
select * FROM historique_commandes Order by logo ASC limit 1



A Vaincre sans péril, on triomphe sans gloire.
Pierre Corneille, Le Cid 
0
caro__48 Messages postés 242 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 18 mai 2017 61
29 mars 2017 à 11:51
Ce coup ci cela marche MAIS (il y a toujours des mais...) du coup il ne m'affiche que mon logo "Test1".

Dans ma table de plus 5 000 lignes, j'ai plusieurs logos.
"test 1", répété par exemple 1000 fois,
test 2 (3000 fois)
etc etc...

En fait je veux savoir si il est possible afficher
1 seule fois le logo "TEST1"
en dessous
1 seule fois le logo "test2"
etc etc

Suis-je claire?

Merci merci
0
diablo13800 Messages postés 2890 Date d'inscription jeudi 2 juillet 2015 Statut Membre Dernière intervention 16 février 2024 1 844
29 mars 2017 à 11:28
Bonjour,

Il vous suffit de le préciser dans la requête avec "select top 1"
Il me semble que Limit 1 existe aussi mais celui-ci est en fin de requête

-1
caro__48 Messages postés 242 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 18 mai 2017 61
29 mars 2017 à 11:36
Tout d'abord Merci

Ensuite j'ai un autre problème quand je marque "SELECT TOP 1 * FROM historique_commandes Order by logo ASC...

J'ai une erreur :
Erreur de syntaxe près de '1 * FROM historique_commandes Order by logo ASC' à la ligne 1
Savez vous pourquoi? Je fais une erreur dans la transcription ou alors c'est par ce que mes "logos" sont du texte et non des chiffres. Le top 1 marche dans ce cas la??

Merci beaucoup de votre aide :)
0