Probleme de requete sql

Eléphant du PHP | 183 Messages

03 oct. 2006, 14:33

Bonjour,

J'ai un petit probleme sur une requete que je n'arrive pas a faire.

j'ai 2 table

1ere table qui contient mes 5 regions
-ID
-Nom

2ieme table
Les addrese de site de ces region
-ID
-nom
-ID_region

admettons que sur les 5 region seule la 2 ieme region a des enregistrement de site ... je voudrai pouvoir afficher que le nom de cette region qui a des enresgistrement et pas les autre qui n'ont pas d'enresgitrement ... mais je ni arrive pas ... qlq pourrai t'il m'aider ?

merci
_________
Fabien

Mammouth du PHP | 592 Messages

03 oct. 2006, 14:47

salut
il faut un requete croisé (j'ai un trou pour le terme exact :lol: )

SELECT region.nom FROM region,site WHERE region.id==site.id_region

essaye ça pour voir

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

03 oct. 2006, 15:05

salut
il faut un requete croisé (j'ai un trou pour le terme exact :lol: )

SELECT region.nom FROM region,site WHERE region.id==site.id_region

essaye ça pour voir
Avec un seul symbole "=" dans la requête SQL ;)
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 592 Messages

03 oct. 2006, 15:10

oh m.... dsl :oops:

c'es l'habitude des if($mavariable=='qqchose') :lol:

Eléphant du PHP | 183 Messages

04 oct. 2006, 12:34

Salut !

Humm j'ai du mal !! en faite jai tous renomer et je ni arrive pas !!

Voici ma table avoir :

Code : Tout sélectionner

CREATE TABLE `avoir` ( `id` int(11) NOT NULL auto_increment, `id_dpt` varchar(30) NOT NULL default '', `des` text NOT NULL, ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=0 ;
et ma table ville :

Code : Tout sélectionner

CREATE TABLE `ville` ( `Commune` varchar(100) NOT NULL default '', `cp` varchar(6) NOT NULL default '', `Departement` varchar(50) NOT NULL default '', `cod` varchar(4) NOT NULL default '', `id` int(10) NOT NULL auto_increment, PRIMARY KEY (`id`), KEY `id` (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=0 ;
Alors quand j'ai ma page ou je passe les parametre comme ceci :

index.php?dest=avoir&pays=67&r=4&d=14

Le "d" correspondant au departement Je voudrai afficher les villes de la table "ville" (le champs "cod" correpondant a l'id du departement....) seulement si elle ont au moins 1 enregistrement dans la table "avoir' qui a la corespondance avec le champs "id_dpt".

J'ai essayer ceci mais erreur ..

Code : Tout sélectionner

$rr = "SELECT ville.cod,ville.Commune,avoir.id_dpt FROM ville,avoir WHERE ville.cod==avoir.id_dpt"; while ($c2 =mysql_fetch_array($rr) ){ echo "$c2[Commune]"; }
Merci de votre aide.
_________
Fabien

Mammouth du PHP | 592 Messages

04 oct. 2006, 13:37

pour le echo il faut mettre ça
echo "$c2['Commune']";
//ou tu peut mettre ça aussi
echo "$c2[1]";

Eléphant du PHP | 183 Messages

04 oct. 2006, 13:49

bon j'ai reussi a recuperer le nom des ville mais pas optimisé du tous ... arfff

voila la chose

Code : Tout sélectionner

$result1 = mysql_query(" SELECT * FROM avoir WHERE id_region ='$_GET[r]' AND id_dpt='$_GET[d]' ORDER BY id DESC $limit_str"); while ($e3 =mysql_fetch_array ($result1) ){ $result2 = mysql_query(" SELECT Commune FROM ville WHERE id =$e3[id_ville] "); $c2=mysql_fetch_array($result2); echo "$c2[Commune]<br>"; }
Quelqu'un pourrai t'il m"aider a l'optimiser ? en requete croisé ? afin que tou tienne sur 1 ligne.

Merci

EDIT autre petit probleme

Si j'ai dans "avoir" 2 enregistrement pour la meme ville ma liste il me met 2 fois le nom de la ville ... exemple :

Par ville :
Le mont st michel
Amigny
Le mont st michel

Comment enlever les doublons ?
_________
Fabien

Mammouth du PHP | 592 Messages

04 oct. 2006, 14:08

merci pour moi puisque je tente de t'aider

mais pour supprimer les doublon on utilise le distinct.

Regarde sur certains sites pour t'aider dans tes requetes sql
comme l'altruiste par exemple

Eléphant du PHP | 377 Messages

04 oct. 2006, 14:08

$result= mysql_query("SELECT DISTINCT Commune FROM avoir AS a
LEFT JOIN ville AS v ON a.id_ville=v.id
WHERE a.id_region ='$_GET[r]' AND a.id_dpt='$_GET[d]'
ORDER BY a.id DESC $limit_str") or exit(mysql_error());
while($r=mysql_fetch_assoc($result)) {
    echo $r['Commune']."<br />";
}
vala vala ;)

Remarque : pour l'optimisation, mieux vaut utiliser SELECT ... FROM a LEFT JOIN b ON a.un_champ=b.un_autre_champ que SELECT ... FROM a,b WHERE a.un_champ=b.un_autre_champ
Petit scarabée deviendra grand

Eléphant du PHP | 183 Messages

04 oct. 2006, 14:18

Merci fred9999 ;) et Shrell (ta solution marche nikel !!)
_________
Fabien

Mammouth du PHP | 592 Messages

04 oct. 2006, 14:21

merci à toi de remercier les personnes qui ton aidée sans en oublier aucune.

Va et bonne route pavé de php à toi :wink:

Eléphant du PHP | 183 Messages

04 oct. 2006, 14:29

De rien ! c'est normale de remercier les personnes quand elle nous aide :)

Et desolé de t'avoir oublié la premier fois :).

Sinon j'ai encore un mini probleme !

comment recuerper l'id de la ville ?

Code : Tout sélectionner

$result1= mysql_query("SELECT DISTINCT Commune FROM avoir AS a LEFT JOIN ville AS v ON a.id_ville=v.id WHERE a.id_region ='$_GET[r]' AND a.id_dpt='$_GET[d]' ") or exit(mysql_error()); while($r=mysql_fetch_assoc($result1)) { echo "<a href=\"$r[id]\">$r[Commune]</a><br />"; }
$r[id_ville]\ Sa ne marche pas
_________
Fabien

Eléphant du PHP | 377 Messages

04 oct. 2006, 14:34

effectivement, ca ne peut pas marcher : lis ta requete, en l'état actuel des choses tu ne sélectionnes que le champ Commune. Si tu veux aussi l'id_ville, marque le :
"SELECT DISTINCT Commune, id_ville ..."
mais je rejoins fred9999, tu devrais essayer de lire des tutos sur SQL, ca ne pourra que t'aider dans le futur ;)
@+
Petit scarabée deviendra grand

Eléphant du PHP | 183 Messages

04 oct. 2006, 14:37

Je mettais Id au lieu de id_ville ... sa marche :)

En effet je connais bien les base de sql :) les join etc ... je connais pas trops , je vais lire les tuto :) car sa a l'air bien efficace :).


Merci a vous.
_________
Fabien