Petit probléme avec un IF et un ELSE...

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

20 janv. 2006, 22:27

La table qui contient toutes les communes est bien "Vente" ?

La table qui contient les infos sur les mairies est la table "mairies_info" ?

Il y a donc plus d'enregistrements dans la table "Vente" que la table "mairies_info".

On essaie de récupérer tous les enregistrements de la table "Vente" (qu'ils aient ou non une correspondance dans l'autre table) pour ce faire on utilise:
... FROM vente v LEFT JOIN ...
Les champs qui font le lien entre les deux tables sont "id_vente" (pour vente) et ID (pour mairies_info).

Et à la base on recherche une Commune et non une mairie, donc on affiche les données sur la Commune les infos sur la mairie si elles existent dans la table "info_mairie".

Donc je ne vois pas pourquoi le résultat n'est pas celui attendu :?
Peux tu me faire un copier/coller de la structure des tables pour faire des essais en local ?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 96 Messages

21 janv. 2006, 13:23

Merci pour ta patience :)

La table "vente" :

Code : Tout sélectionner

-- phpMyAdmin SQL Dump -- version 2.6.1 -- http://www.phpmyadmin.net -- -- Serveur: localhost -- Généré le : Samedi 21 Janvier 2006 à 10:14 -- Version du serveur: 4.1.9 -- Version de PHP: 4.3.10 -- -- Base de données: `toulouse` -- -- -------------------------------------------------------- -- -- Structure de la table `vente` -- CREATE TABLE `vente` ( `id_vente` int(11) NOT NULL auto_increment, `client` varchar(100) NOT NULL default '', `idsecteur` int(11) default NULL, `commune` varchar(50) default NULL, `date` varchar(50) default NULL, `idcategorie` int(11) default NULL, `adresse` blob, `idcommercial` int(11) default NULL, `idannexe` int(11) default NULL, `idfondation` int(11) default NULL, `idsol` int(11) default NULL, `idtoiture` int(11) default NULL, `idmillesime` int(11) default NULL, `idgeotechnicien` int(11) default NULL, `notes` text, `surface` varchar(150) default NULL, `profondeur` varchar(50) default NULL, PRIMARY KEY (`id_vente`), FULLTEXT KEY `client` (`client`), FULLTEXT KEY `commune` (`commune`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Détails des ventes' AUTO_INCREMENT=332 ;
La table "mairies_info" :

Code : Tout sélectionner

-- phpMyAdmin SQL Dump -- version 2.6.1 -- http://www.phpmyadmin.net -- -- Serveur: localhost -- Généré le : Samedi 21 Janvier 2006 à 10:17 -- Version du serveur: 4.1.9 -- Version de PHP: 4.3.10 -- -- Base de données: `toulouse` -- -- -------------------------------------------------------- -- -- Structure de la table `mairies_info` -- CREATE TABLE `mairies_info` ( `id` int(11) NOT NULL auto_increment, `dde` varchar(30) default NULL, `mairie` varchar(30) default NULL, `ad_dde` varchar(255) default NULL, `cp_dde` varchar(20) default NULL, `tel_dde` varchar(20) default NULL, `fax_dde` varchar(20) default NULL, `ad_mairie` varchar(255) default NULL, `cp_mairie` varchar(20) default NULL, `tel_mairie` varchar(20) default NULL, `fax_mairie` varchar(20) default NULL, `site_web` varchar(255) default NULL, `idpatro` int(11) default NULL, `instructeur` varchar(30) default NULL, `jour_mairie` varchar(255) default NULL, `jour_dde` varchar(255) default NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Infos sur les mairies' AUTO_INCREMENT=6 ;
Le but est de dire que si le champ "MAIRIE" de la table "MAIRIES_INFO" ne contient aucun enregistrement, par exemple TOULOUSE et que dans le champ "COMMUNE" de la table "VENTE" le mot "TOULOUSE" y figure donc on affiche une icone pour prévenir qu'il n'y a aucun enregistrement concernant "TOULOUSE" dans le champ "MAIRIE" de la table "MAIRIES_INFO". En fait, la vérification ne se fait que sur ces 2 champs.
IF
le champ "COMMUNE" contient "TOULOUSE" et le champ "MAIRIE" est vide on affiche une icone.
ELSE
le champ "COMMUNE" et le champ "MAIRIE" contiennent le mot "TOULOUSE" donc on affiche une autre icone pour dire qu'il y a des infos dans la table "MAIRIES_INFO" qui concernent "TOULOUSE".

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

21 janv. 2006, 15:35

avant d'aller plus loin... je me demande comment peut s faire le lien entre les tables alors que le champs qui doivent le faire (le lien) sont tous deux en autoincément !!

Il faudrai un champ séparé dans la table "mairies_info" qui rappel le même ID (id_vente) de la table vente !

sinon le lien aura du mal a se faire correctement.

Apres si tu pouvais aussi donner de quoi remplir les tables :wink:
(mais peut etre qu'en y ajoutant ce champ manquant le problème sera réglé)

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 96 Messages

21 janv. 2006, 16:11

J'ai crée un nouveau champ "id_vente", mais je ne vois pas comment à partir de mon formulaire d'insertion des données, comment l'auto-alimenter ?

Code : Tout sélectionner

-- -- Structure de la table `mairies_info` -- CREATE TABLE `mairies_info` ( `id` int(11) NOT NULL auto_increment, `id_vente` int(11) default NULL, `dde` varchar(30) default NULL, `mairie` varchar(30) default NULL, `ad_dde` varchar(255) default NULL, `cp_dde` varchar(20) default NULL, `tel_dde` varchar(20) default NULL, `fax_dde` varchar(20) default NULL, `ad_mairie` varchar(255) default NULL, `cp_mairie` varchar(20) default NULL, `tel_mairie` varchar(20) default NULL, `fax_mairie` varchar(20) default NULL, `site_web` varchar(255) default NULL, `idpatro` int(11) default NULL, `instructeur` varchar(30) default NULL, `jour_mairie` varchar(255) default NULL, `jour_dde` varchar(255) default NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Infos sur les mairies' AUTO_INCREMENT=6 ; -- -- Contenu de la table `mairies_info` -- INSERT INTO `mairies_info` VALUES (1, NULL, 'Grenade', 'Carla bayle', '78, Avenue du 8 mai 1945', '31600', '05.62.79.81.60', '05.63.32.56.98', '1 impasse de l''enclos', '31120', '05.61.76.71.76', '05.63.98.58.21', 'http://www.Carlabayle.com', 2, 'Letourmi', 'Tous les jours', 'Tous les jours');

Code : Tout sélectionner

-- Structure de la table `vente` -- CREATE TABLE `vente` ( `id_vente` int(11) NOT NULL auto_increment, `client` varchar(100) NOT NULL default '', `idsecteur` int(11) default NULL, `commune` varchar(50) default NULL, `date` varchar(50) default NULL, `idcategorie` int(11) default NULL, `adresse` blob, `idcommercial` int(11) default NULL, `idannexe` int(11) default NULL, `idfondation` int(11) default NULL, `idsol` int(11) default NULL, `idtoiture` int(11) default NULL, `idmillesime` int(11) default NULL, `idgeotechnicien` int(11) default NULL, `notes` text, `surface` varchar(150) default NULL, `profondeur` varchar(50) default NULL, PRIMARY KEY (`id_vente`), FULLTEXT KEY `client` (`client`), FULLTEXT KEY `commune` (`commune`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Détails des ventes' AUTO_INCREMENT=332 ; -- -- Contenu de la table `vente` -- INSERT INTO `vente` VALUES (1, 'Adanero Donderis', 4, 'Carla Bayle', '10 mai 2005', 24, 1, 276, 3, 3, 1, 1, 11, 2, 'En cours de permis', '86', '4.50');
Et si la recherche ne se faisait que sur commune et mairie ?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

21 janv. 2006, 16:18

J'ai crée un nouveau champ "id_vente", mais je ne vois pas comment à partir de mon formulaire d'insertion des données, comment l'auto-alimenter ?
justement il ne faut pas l'autoincrémenter, mais donner à ce champ l'id correspondant à la commune.



Si dans la table vente:

id_vente=12 (autoincrément, OK)
commune=toulouse

alors il faut mettre dans la table "info_mairie":

id (en autoincrément)
id_vente=12
mairie=toulouse
Et si la recherche ne se faisait que sur commune et mairie ?
ce serai possible mais pas évident, par principe et facilité on fait toujours correspondre deux tables avec des entiers.

Je vais faire quelques essaies avec ça.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

21 janv. 2006, 16:38

Voila la requete ne diffère pas beaucoup de celle d'avant hormis la présence du champ "id_vente" de la table "mairies_info"
<?php $sql="SELECT v.commune, i.mairie from vente v LEFT JOIN mairies_info i on v.id_vente = i.id_vente where v.commune LIKE '%".$commune."%'"; ?>
Donc les champs "id_vente" doivent être les mêmes pour les deux tables s'il s'agit de la mairie d'une même commune.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 96 Messages

24 janv. 2006, 12:07

Salut, aprés 3 jours de vacances, je reviens...
Bon, ça fonctionne bien, j'ai juste rajouté dans la requéte un petit DISTINCT. Merci et à bientôt pour un autre probléme :D
Kimble