Bonjour,
pour les besoin d'un site je suis en train de réaliser un script AJAX qui fait la même chose ou presque que qu'on vous chercher une région ou une ville sur google map.
Coté base de donné j'ai crée trois table
coté PHP, j'ai du faire trois requêtes une requête pour chaque table, en gros je fait une recherche dans la premier table si rien n'est trouvé je cherche dans la deuxième table si rien ne correspond je passe a la troisième table
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
32
33
34
35
36 -- `location_country` CREATE TABLE `location_country` ( `country_id` smallint(3) unsigned NOT NULL AUTO_INCREMENT, `country_en_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `country_local_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`country_id`), UNIQUE KEY `country_en_name` (`country_en_name`,`country_local_name`) ) -- `location_region` CREATE TABLE `location_region` ( `region_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `region_country_id` smallint(3) unsigned NOT NULL, `region_post_code` varchar(15) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `region_common_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `region_local_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`region_id`), KEY `region_country_id` (`region_country_id`,`region_common_name`,`region_local_name`), KEY `region_post_code` (`region_post_code`) ) -- `location_location` CREATE TABLE `location_location` ( `location_id` bigint(13) unsigned NOT NULL AUTO_INCREMENT, `location_country_id` smallint(3) unsigned NOT NULL, `location_region_id` int(10) unsigned NOT NULL, `location_post_code` varchar(15) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `location_en_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `location_local_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, PRIMARY KEY (`location_id`), KEY `location_country_id` (`location_country_id`,`location_region_id`,`location_en_name`,`location_local_name`), KEY `location_post_code` (`location_post_code`) )
voila les trois requête
je commence par la table `location_location`
puis la deuxième `location_region`
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 mysql_query('SELECT * FROM location_location,location_region,location_country WHERE ( (location_post_code LIKE \'%' . $location . '%\' || location_common_name LIKE \'%' . $location . '%\' || location_local_name LIKE \'%' . $location . '%\') && (location_region_id = region_id && region_country_id = country_id ))') or die (mysql_error());
et la troisième table `location_country`
Code : Sélectionner tout - Visualiser dans une fenêtre à part mysql_query('SELECT * FROM location_region,location_country WHERE ((region_post_code LIKE \'%' . $location . '%\' || region_common_name LIKE \'%' . $location . '%\' || region_local_name LIKE \'%' . $location . '%\') && (region_country_id = country_id))') or die (mysql_error());
ça marche très bien, sauf que je trouve que c'est un peu lourd "trois requête mysql" sur tous que le script est appelé via AJAX a chaque que l'utilisateur tape ou supprime une lettre sur le champ de recherche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part mysql_query('SELECT * FROM location_country WHERE country_en_name LIKE \'%' . $location . '%\' || country_local_name LIKE \'%' . $location . '%\'') or die (mysql_error());
voila je suis presque sur qu'il moyen de résumer c'est trois requête en une seul. en sachant qu'elle doit retourné
1_ le pays et la région et la localisation si la correspondance est trouvé dans la table `location_location`
2_le pays et la région si la correspondance est trouvé dans la table `location_region`
3_ et puis seulement le pays si la correspondance est trouvé dans la table `location_country`
de mon coté j'ai tous essayé (joint, union, in ...) je n'est eu que des 'mysql_error' comme résulta.
si non si je doit revoir la structure de ma base de donné ou je m'y prend mal, je suis ouvert a toutes propositions.
voila je m'en remet a vos main d'experts, et merci pour votre aide.
Partager