Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/12/2006, 17h42   #1
Nouveau Membre du Club
 
Inscription : juillet 2005
Messages : 130
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 130
Points : 27
Points : 27
Par défaut [SQL] Utilisation de distinct

Bonjour tout le monde,

je veux utiliser DISTINCT pour eviter la redondance des données...

voici la requete qui me donne des elements répété pourtant c'esi simple:

Code :
1
2
 
$sql_head="SELECT DISTINCT Headliner FROM active_headliners where HeadlinerID=$headlinerId";
Merci
toddy_101 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2006, 18h22   #2
Xo
Expert Confirmé
 
Avatar de Xo
 
Inscription : janvier 2005
Messages : 2 701
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2005
Messages : 2 701
Points : 3 237
Points : 3 237
Envoyer un message via Skype™ à Xo
Salut,

Et quel est le problème ?

Merci également de respecter les CONSEILS... à lire AVANT de POSTER SVP.
__________________
"Ce que l'on conçoit bien s'énonce clairement,
Et les mots pour le dire arrivent aisément." Nicolas Boileau

"Expliquer empêche de comprendre si cela dispense de chercher"

Quiz Oracle : venez tester vos connaissances !

La FAQ Oracle : 138 réponses à vos questions
Aidez-nous à la compléter
Xo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2006, 18h26   #3
Nouveau Membre du Club
 
Inscription : juillet 2005
Messages : 130
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 130
Points : 27
Points : 27
Citation:
Envoyé par Xo
Salut,

Et quel est le problème ?

Merci également de respecter les CONSEILS... à lire AVANT de POSTER SVP.
merci pour ta réponse,

le problème c'est que meme si j'utilise distinct, ca me donne des elements répétés...
toddy_101 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2006, 08h17   #4
Membre éclairé
 
Avatar de supernova
 
Développeur informatique
Inscription : juillet 2005
Messages : 443
Détails du profil
Informations personnelles :
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juillet 2005
Messages : 443
Points : 359
Points : 359
Salut,

As tu teste avec DISTINCT ROW ?
__________________
Il est difficile d’attraper un chat noir dans une pièce sombre. Surtout lorsqu'il n’y est pas.
supernova est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2006, 09h21   #5
Membre confirmé
 
Avatar de griese
 
Inscription : juin 2006
Messages : 646
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juin 2006
Messages : 646
Points : 243
Points : 243
Salut,
Il me semble qu'il faut mettre le champ sur lequel tu fais le DISTINCT en parenthèses :
Code :
1
2
 
$sql_head="SELECT DISTINCT(Headliner) FROM active_headliners where HeadlinerID=$headlinerId";
__________________
(\ _ /)
(='.'=) Voici Lapinou. Aidez le à conquérir le monde
(")-(") en le reproduisant.

http://mosfootball.over-blog.com
griese est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2006, 10h12   #6
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
Ou quelle horreur griese!!! Combien d'énormités dans votre prose :

Citation:
Il me semble qu'il faut mettre le champ sur lequel tu fais le DISTINCT en parenthèses :
Il n'y a pas de "champs" dans les bases de données.
Lisez l'aritcle que j'ai écrit à ce sujet :
http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L2

DISTINCT n'est pas une fonction et ne peut donc pas opérer sur une colonne en particulier. Donc pas de parenthésage.
A lire sur le sujet :
http://sqlpro.developpez.com/cours/sqlaz/select/#L1.2

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2006, 10h26   #7
Membre confirmé
 
Avatar de griese
 
Inscription : juin 2006
Messages : 646
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juin 2006
Messages : 646
Points : 243
Points : 243
Désolé, erreur de terme, je voulais dire colonne. Mille excuses
J'ai toujours fais comme ça moi et ça marche...
__________________
(\ _ /)
(='.'=) Voici Lapinou. Aidez le à conquérir le monde
(")-(") en le reproduisant.

http://mosfootball.over-blog.com
griese est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2006, 10h59   #8
Nouveau Membre du Club
 
Inscription : juillet 2005
Messages : 130
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 130
Points : 27
Points : 27
D'après vous c'est quoi la solution??? ca ne marche toujours pas?? et comment puis utiliser distinct row?? merci encore
toddy_101 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2006, 11h11   #9
Membre confirmé
 
Avatar de griese
 
Inscription : juin 2006
Messages : 646
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juin 2006
Messages : 646
Points : 243
Points : 243
Une question en passant, apparement ta requete SQL est a l'intérieur d'un autre langage. C'est quoi comme langage ?
__________________
(\ _ /)
(='.'=) Voici Lapinou. Aidez le à conquérir le monde
(")-(") en le reproduisant.

http://mosfootball.over-blog.com
griese est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2006, 11h14   #10
Membre éprouvé
 
Avatar de Mindiell
 
Inscription : juin 2006
Messages : 728
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : juin 2006
Messages : 728
Points : 451
Points : 451
Moi j'utilise toujours champ et enregistrement...

Pour toddy_101, tu peux nous donner un exemple de ce que contient ta table et ce que tu aimerais avoir comme retour ?
Et aussi ce que contient ta variable php ?

griese : surement du php vu la variable
__________________
Mindiell
"Souvent, femme barrit" - Elephant man
Mindiell est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2006, 11h32   #11
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
toddy, je ne vois pas comment la requête que tu nous montres peut donner plusieurs lignes. Je te propose donc un petit test. Remplace provisoirement ta requête par la suivante :
Code :
1
2
3
4
 
$sql_head="SELECT 'Hello world !' ";
-- ou bien, si tu es sur Oracle :
$sql_head="SELECT 'Hello world !' FROM DUAL ";
Combien de lignes obtiens-tu ? Quelles données contiennent-elles ?
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2006, 11h53   #12
Nouveau Membre du Club
 
Inscription : juillet 2005
Messages : 130
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 130
Points : 27
Points : 27
Citation:
Envoyé par Antoun
toddy, je ne vois pas comment la requête que tu nous montres peut donner plusieurs lignes. Je te propose donc un petit test. Remplace provisoirement ta requête par la suivante :
Code :
1
2
3
4
 
$sql_head="SELECT 'Hello world !' ";
-- ou bien, si tu es sur Oracle :
$sql_head="SELECT 'Hello world !' FROM DUAL ";
Combien de lignes obtiens-tu ? Quelles données contiennent-elles ?
Merci antoun pour ta réponse...

comment puis-je tester ?? comment je fais pour afficher les champs?
toddy_101 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2006, 11h59   #13
Membre confirmé
 
Avatar de griese
 
Inscription : juin 2006
Messages : 646
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juin 2006
Messages : 646
Points : 243
Points : 243
Citation:
Envoyé par Mindiell
griese : surement du php vu la variable
C'est ce que je pensais mais je voulais être sûr. Donc la requete est vraiment écrite comme ca dans le code où elle simplifié ? car on peut pas mettre un variable php comme ça dans une requete SQL :
Code :
1
2
 
$sql_head="SELECT DISTINCT(Headliner) FROM active_headliners where HeadlinerID=".$headlinerId."";
...
__________________
(\ _ /)
(='.'=) Voici Lapinou. Aidez le à conquérir le monde
(")-(") en le reproduisant.

http://mosfootball.over-blog.com
griese est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2006, 12h06   #14
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Citation:
Envoyé par toddy_101
comment puis-je tester ?? comment je fais pour afficher les champs?
Comment fais-tu pour tester ta requête actuelle, et pour afficher ses "champs" ?
(au passage, on ne parle de champ que pour un formulaire ; dans une base de données, ce sont des colonnes).
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2006, 12h06   #15
Membre éprouvé
 
Avatar de Mindiell
 
Inscription : juin 2006
Messages : 728
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : juin 2006
Messages : 728
Points : 451
Points : 451
griese> euh, si si on peut je pense, ou alors entre 'simple quote' ? Mais php permet bien ce genre d'écriture d'une manière ou des deux.
__________________
Mindiell
"Souvent, femme barrit" - Elephant man
Mindiell est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2006, 12h10   #16
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Griese, Mindiell : PHP utilise deux types de chaînes, les chaînes simples écrites 'entre apostrophes' (simple quotes), et les chaînes interprétées, "entre guillemets" (double quotes), à l'intérieur desquelles on peut effectivement écrire des variables, que PHP repère grâce au $ et remplace par leur valeur.

Ce système de chaînes interprétées (ou interpolées) se retrouve dans divers autres langages, comme par exemple Perl.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2006, 12h15   #17
Nouveau Membre du Club
 
Inscription : juillet 2005
Messages : 130
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 130
Points : 27
Points : 27
ca marche normalement... j'ai meme affiché la requete et ca donne:
Code :
1
2
3
4
 
 
SELECT DISTINCT Headliner FROM active_headliners
WHERE HeadlinerID=10207
c'est vraiment bizarre!! je ne comprend pas pourquoi ca ne marche pas avec DISTINCT!!!
toddy_101 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2006, 12h19   #18
Membre éprouvé
 
Avatar de Mindiell
 
Inscription : juin 2006
Messages : 728
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : juin 2006
Messages : 728
Points : 451
Points : 451
Antoun > Oui, c'est bien ce que j'avais dit, mais je me suis trompé de quotes

toddy > peux-tu , enfin, nous montrer quelques lignes de ta base; ce que tu souhaites obtenir; ton code php ?
__________________
Mindiell
"Souvent, femme barrit" - Elephant man
Mindiell est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2006, 12h26   #19
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Citation:
Envoyé par toddy_101
ca marche normalement...
C'est quoi "normalement" ?
Citation:
Envoyé par toddy_101

j'ai meme affiché la requete et ca donne:
Code :
1
2
3
 
SELECT DISTINCT Headliner FROM active_headliners
WHERE HeadlinerID=10207
Si c'est mon "hello world !" qui te donne ça, ça n'est pas normal du tout !

Bon, je vais être un peu plus explicite (tant pis pour la maïeutique ). Je pense que tu lances une autre requête que celle que tu nous as montré, ou bien que tu te trompes dans la lecture du résultat. Montre-nous donc ton code PHP.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2006, 12h32   #20
Nouveau Membre du Club
 
Inscription : juillet 2005
Messages : 130
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 130
Points : 27
Points : 27
"ca marche normalement" c'etait concernant les quotes...

bon voici mon code php:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
 
$city=$_GET['metro'];
	$sql="SELECT * FROM cities where id=$city";
	$result= mysql_query($sql);
	$row=mysql_fetch_array($result);
	$city=$row['city'];
	$sql="SELECT * FROM venue_list_active where city='$city'";
	$result= mysql_query($sql);
 
	while($row=mysql_fetch_array($result))
		{
		$id_venue=$row['VenueID'];
	$sql_events="SELECT * FROM list_active where VenueID=$id_venue";
				$result_events= mysql_query($sql_events);
 
				while($row_events=mysql_fetch_array($result_events))
				{
				$headlinerId= $row_events["HeadlinerID"];
				$sql_head="SELECT DISTINCT Headliner FROM active_headliners WHERE HeadlinerID=$headlinerId";
				echo "$sql_head <br>";
 
				$result_head= mysql_query($sql_head) or die(mysql_error());
					while($row_head=mysql_fetch_array($result_head))
				{
 
					$headlinerId=$row_head['HeadlinerID'];
					$headliner=$row_head['Headliner'];
}
}
}

et voici quelque lignes de la table active_headliners:


HeadlinerID Headliner CategoryID
116888 Marlena Shaw 26
116440 "Joy" A Gospel Christmas 26
112683 "Q4-'05 Tickets" 4
115576 +44 26
105494 100.3 The Beat Holiday Cooldown 26
112109 110 In The Shade 4
116665 12th Night Party 26
115623 13 4
113675 16 Candles 26
106830 1964...The Tribute 26
114027 2008 Summer Olympics 25
114028 2010 Winter Olympics 25
114029 2012 Summer Olympics 25
110433 25th Annual Putnam County Spelling Bee 4
105324 30 Seconds To Mars
toddy_101 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h19.


 
 
 
 
Partenaires

Hébergement Web