munchie
Messages postés4Date d'inscriptionjeudi 15 mars 2007StatutMembreDernière intervention11 septembre 2007
-
7 sept. 2007 à 19:36
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 juillet 2011
-
11 sept. 2007 à 21:48
bonjour à tous,
Voila j'ai un petit problème avec ma requete...
Je veux récupérer les champs d'une table mais en évitant les doubles. et lorsque l'on clic sur une valeur de la liste ca devrait lister les resultats correspondants au champs.
je m'explique...
Voici la requete:
$query="SELECT DISTINCT ville_agenda
FROM t_agenda";
Donc avec cela j'obtient les différents nom des villes dans la liste déroulante sans doublon. Donc c ok! mais il est sensé lister toutes les expositions qui existe pour une ville.mais il ne récupère q'un seul resultat. Il faudrait pouvoir lier l'ID mais avec DISTINCT pas possible....
Comment faire pour qu'il me liste toutes les expositions existantes pour la ville selectionnée???
merci à tous!!!
je débute en php donc soyez indulgent ;)
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 juillet 201137 8 sept. 2007 à 22:33
salut,
Peux-tu mettre un exemple plus clair.
Exemple la structure de tes 3 tables (il me semble que tu en as 3)
Et le resultat de ta requete.
Si j'imagime c que tu cherches c'est une requete du style que tu veux?
select agenda + ' - ' + ville
from ville
inner join agenda_ville on agenda_ville.idville = ville.idvillle
inner join agenda on agenda_ville.idagenda = agenda.idagenda
Et la tu as les agenda de toutes les villes.
Je me trompes peut etre mais sans plus de detail c'est difficile de repondre?
munchie
Messages postés4Date d'inscriptionjeudi 15 mars 2007StatutMembreDernière intervention11 septembre 2007 9 sept. 2007 à 20:13
En fait, c'est plus simple que ca
je n'ai qu'une seule table dont voici la structure:
CREATE TABLE `t_agenda` (
`id_agenda` int(11) NOT NULL auto_increment,
`evt_agenda` varchar(255) character set latin1 collate latin1_general_cs NOT NULL,
`net_agenda` varchar(255) character set latin1 collate latin1_general_cs NOT NULL,
`adresse_agenda` varchar(255) character set latin1 collate latin1_general_cs NOT NULL,
`ouver_agenda` varchar(255) character set latin1 collate latin1_general_cs NOT NULL,
`plan_agenda` varchar(255) character set latin1 collate latin1_general_cs NOT NULL,
`tel_agenda` varchar(50) character set latin1 collate latin1_general_cs NOT NULL,
`ville_agenda` varchar(50) NOT NULL,
`CP_agenda` int(11) NOT NULL,
`dat_agenda` date NOT NULL,
`dat_fin_agenda` date NOT NULL,
PRIMARY KEY (`id_agenda`)
) ENGINE= InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=16 ;
Je récupère le champ "ville_agenda" pour lister les villes dans une liste déroulante. Par exemple 3expositions différentes peuvent avoir lieu à Bruxelles.
Dans ma liste déroulante , je veux que "Bruxelles" apparaissent une seule fois. et lorsque je desire afficher les expositions qui ont lieu à Bruxelles , je veux qu'il me liste les 3 expositions existantes.
Problème : quand je fais ceci :
$query2="SELECT *
FROM t_agenda
ORDER BY ville_agenda
";
Il affiche "Bruxelles" 3 fois dans ma liste déroulante.(correspondant aux 3expositions)
Mais si je fais ceci:
$query2="SELECT DISTINCT ville_agenda
FROM t_agenda
ORDER BY ville_agenda
";
là, "Bruxelles" apparait une seule fois mais il n'y a plus d'ID et donc si je désire afficher les expositions correspondantes a "Bruxelles" il me mets ceci:
Warning : mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\Tools\Wamp\www\diminewtemp\include\agenda2.php on line 138
J'ai un peu peur de pas être très clair... donc voici l'ensemble de mon code...
$query2 =\"SELECT *
FROM t_agenda
ORDER BY ville_agenda\";
$result2= mysql_query($query2);
if (!isset($_GET['choix'])){
$sql=\"SELECT *
FROM t_agenda
ORDER BY dat_agenda\";
}
elseif(($_GET['choix'])==\"select_tt\"){
$sql=\"SELECT *
FROM t_agenda
ORDER BY dat_agenda\";
}
else{
$sql=\"SELECT *
FROM t_agenda
WHERE id_agenda=\".$_GET['choix'].\"
ORDER BY dat_agenda\";
}
munchie
Messages postés4Date d'inscriptionjeudi 15 mars 2007StatutMembreDernière intervention11 septembre 2007 9 sept. 2007 à 22:31
merci pour ta réponse...
mais lorsque j'ajoute un évènement , j'ai le nom de l'expo, les dates , l'adresse, la ville, ect... et la liste déroulante me sert d'outil de recherche (par ville) qui permet d'afficher toutes les expos qui ont lieu à bruxelles par exemple...
je ne comprend pas pourquoi (dans ce cas ci) je devrais faire 2tables pour encoder un évènement... mais si c'est la seule solution... alors...j'vai y regarder...
Vous n’avez pas trouvé la réponse que vous recherchez ?
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 juillet 201137 10 sept. 2007 à 10:27
Ok,
J'ai pigé ton truc, dans la construction de ta liste dans il faut utilisé le nom de ta ville et non l'ID de ta ligne d'agenda, sinon tu auras toujours qu'une seule ligne car id_agenda est normalement unique c'est logique.
munchie
Messages postés4Date d'inscriptionjeudi 15 mars 2007StatutMembreDernière intervention11 septembre 2007 11 sept. 2007 à 12:13
encore merci pour ta réponse!
voila, j'ai testé ta proposition et malheureusement il me met une erreur sur cette ligne:
while($row=mysql_fetch_array($sql_result)){
alors, j'ai testé également avec 2 tables. celle dont je t'ai mis la structure plus haut...(t_agenda) et une nouvelle qui reprend le nom des villes.(t_ville_expo) Pour relier les 2 j'ai ajouté un champs "num_ville" dans ma première table (t_agenda) qui correspond donc a l'ID de la ville (de la deuxième table) .
J'ai fait la requete :
$sql="SELECT *
FROM t_agenda
WHERE num_ville=".$_GET['choix']."
";
}
et tout fonctionne parfaitement!!! Donc "bruxelles apparait une fois dans la liste et quand j'affiche les resultats pour "bxl" il me liste les 3expos existantes...
mais voila, maintenant se pose un autre probleme... il ya une partie administration dans mon site. Et lorsqu'on va ajouter une nouvelle exposition dans l'agenda, comment faire pour remplir le "num_ville" de la table(t_agenda). Comment faire pour qu'il fasse la correspondance entre la nouvelle ville qu'il encode et un "num_ville".
Aieaieaie...dur dur pour un debutant tout ca!....;)
peux-tu me donner des pistes? J'ai encore de gros problème de logique je crois...
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 juillet 201137 11 sept. 2007 à 21:48
Normalement,
Tu inseres dans la tabole ville,
Tu fais uen requete pour recuperer le dernier index inserer, c'es tun truc du genere
SELECT LAST_INSERT_ID() FROM table
Et apres tu inseres dans ta table agenda ton evenement.
Et apres tu peux mettre les deux insertions dans une transaction.