Une requête pour plusieurs tables

Eléphanteau du PHP | 40 Messages

25 oct. 2005, 11:41

Bonjour à tous,
Je fais 4 requêtes sur 4 tables différentes pour un même affichage.
Ce que je cherche c'est de faire une requête qui regroupe les 4. J'ais déja essayé le style :

Code : Tout sélectionner

SELECT a.id, b.id, c.id, d.id FROM auto as a, moto as b, produits as c, offre as d
Mais cela me donne plus de 50000 résultats alors qu'il n'y en a que 55.
De quel manière peut on regrouper les 4 requêtes?

Code : Tout sélectionner

$select = "SELECT marques, modele, pseudom, departement, prix, id_auto, nomDestination1, DATE_FORMAT(date, '%d.%m.%y') date FROM fk_auto "; $sql1 = "SELECT marque, modele, pseudom, departement, prix, id, nomDestination1, DATE_FORMAT(date, '%d.%m.%y') date FROM fk_moto "; $sql2 = "SELECT titre, departement, rub, prix, pseudom, id, nomDestination1, DATE_FORMAT(date, '%d.%m.%y') date FROM fk_produits "; $sql3 = "SELECT secteur_activite, pseudom, fonction, lieu, id, nom_fichier, DATE_FORMAT(date, '%d.%m.%y') date FROM fk_offre_emploi ";
Merci pour votre aide

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

25 oct. 2005, 11:50

il faut te renseigner sur les JOINTURES

Code : Tout sélectionner

SELECT a.id, b.id, c.id, d.id FROM ((auto as a JOIN moto as b ON a.id=b.id) JOIN produits as c ON a.id=c.id) JOIN offre as d ON a.id=d.id
Je ne suis pas sûr que cette requete soit juste vu que je ne connais pas la structure de ta table mais ça doit y ressembler ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

03 nov. 2005, 18:00

Cela fait plus d'une semaine que je cherche une solution à mon problème qui est de regrouper ces 4 requêtes en une seule et toujours rien. J'ais essayé avec les jointures mais cela m'affiche des milliers de résultat, j'ais essayé de manière simple avec un where mais rien...
Si quelqu'un a une idée merci pour votre aide.

Mammouth du PHP | 983 Messages

03 nov. 2005, 18:04

Avant de vouloir une requete, dis nous ce que tu souhaites faire. Tu veux sélectionner toutes les lignes de tes 4 tables?

Eléphanteau du PHP | 40 Messages

03 nov. 2005, 18:09

non c'est une recherche par mot clé donc je pense finir par :

Code : Tout sélectionner

id LIKE '%". $mots_cle ."%'
par-exemple, mais je ne l'ais pas ajouté pour tester la requete et voir si toutes les données sont affichés.

Eléphanteau du PHP | 40 Messages

03 nov. 2005, 20:15

Je vais essayer de vous expliquer ce que je veux obtenir.
Voila j'ais 4 tables : auto, moto, produits et offre.
J'ais utilisé un SELECT pour chaque table et affiché le résultat sur une même page. Le problème est que je ne peut pas ajouter de limite d'affichage : LIMIT 0, 10 puisque ajouté à chaque requête cela me donne au maximum 40 affichages s'il y a dix résultats par table.
Voici mon code :

Code : Tout sélectionner

$select_produits = "SELECT cat, id, rub, titre, pseudom, ville, nomDestination1, departement, prix, DATE_FORMAT(date, '%d.%m.%y') date, SUBSTRING(description,1,200) AS description FROM fk_produits where (cat LIKE '%". $mots_cle ."%' OR titre LIKE '%". $mots_cle ."%' OR ville LIKE '%". $mots_cle ."%' OR departement LIKE '%". $mots_cle ."%' OR prix LIKE '%". $mots_cle ."%' OR id LIKE '%". $mots_cle ."%' OR date LIKE '%". $mots_cle ."%' OR description LIKE '%". $mots_cle ."%' OR rub LIKE '%". $mots_cle ."%') "; $select_auto = "SELECT id_auto, marques, modele, ville, nomDestination1, departement, prix, DATE_FORMAT(date, '%d.%m.%y') date, SUBSTRING(description,1,200) AS description FROM fk_auto where (id_auto LIKE '%". $mots_cle ."%' OR marques LIKE '%". $mots_cle ."%' OR modele LIKE '%". $mots_cle ."%' OR departement LIKE '%". $mots_cle ."%' OR prix LIKE '%". $mots_cle ."%' OR ville LIKE '%". $mots_cle ."%' OR date LIKE '%". $mots_cle ."%' OR description LIKE '%". $mots_cle ."%') "; $select_moto = "SELECT id, marque, modele, ville, nomDestination1, departement, prix, DATE_FORMAT(date, '%d.%m.%y') date, SUBSTRING(description,1,200) AS description FROM fk_moto where (id LIKE '%". $mots_cle ."%' OR marque LIKE '%". $mots_cle ."%' OR modele LIKE '%". $mots_cle ."%' OR departement LIKE '%". $mots_cle ."%' OR prix LIKE '%". $mots_cle ."%' OR ville LIKE '%". $mots_cle ."%' OR date LIKE '%". $mots_cle ."%' OR description LIKE '%". $mots_cle ."%') "; $select_offre = "SELECT id, secteur_activite, lieu, nom_fichier, DATE_FORMAT(date, '%d.%m.%y') date, SUBSTRING(profil_rechercher,1,200) AS profil_rechercher FROM fk_auto where (id_auto LIKE '%". $mots_cle ."%' OR secteur_activite LIKE '%". $mots_cle ."%' OR lieu LIKE '%". $mots_cle ."%' OR date LIKE '%". $mots_cle ."%' OR profil_rechercher LIKE '%". $mots_cle ."%') ";
J'ajoute la limite :

Code : Tout sélectionner

if (!isset($_GET['debut'])) $_GET['debut'] = 0; $nb_affichage_par_page = 10; $sql1 = $sql .= 'LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;
Voila je sais pas si j'étais assez clair.. :oops:
Merci pour votre aide

Mammouth du PHP | 1311 Messages

03 nov. 2005, 21:23

Avant de vouloir une requete, dis nous ce que tu souhaites faire. Tu veux sélectionner toutes les lignes de tes 4 tables?
et je rajouterai quelle est ton but
tu faire une requete sur n tables si il y une condition logique qui les relient
mais on peut pas (nous) savoir ce quelle doivent affichées et les lien qui les lient

si on a pas un minimum de renseignement on ne pourra pas d'aidez efficacement

Eléphanteau du PHP | 40 Messages

03 nov. 2005, 21:33

Le problème est la il n'y aucun lien entre les tables.
Je veux effectuer une recherche par mots clés dans ces 4 tables en affichant 10 résultats par page.
Voici la structure de mes tables :

Code : Tout sélectionner

CREATE TABLE `fk_auto` ( `id_auto` mediumint(5) NOT NULL auto_increment, `pseudom` varchar(50) NOT NULL default '', `annee` varchar(5) NOT NULL default '', `kilometrage` int(15) NOT NULL default '0', `prix` int(15) NOT NULL default '0', `puissance` varchar(10) NOT NULL default '', `description` longtext NOT NULL, `marques` varchar(50) NOT NULL default '', `modele` varchar(50) NOT NULL default '', `couleur` varchar(15) NOT NULL default '', `motorisation` varchar(15) NOT NULL default '', `types_annonceur` varchar(15) NOT NULL default '', `departement` varchar(20) NOT NULL default '', `ville` varchar(50) NOT NULL default '', `web` varchar(100) NOT NULL default '', `tel` varchar(20) NOT NULL default '', `emailm` varchar(100) NOT NULL default '', `mobile` varchar(20) NOT NULL default '', `date` varchar(15) NOT NULL default '', `heure` varchar(15) NOT NULL default '', `nomDestination1` varchar(255) NOT NULL default '', `nomDestination2` varchar(255) NOT NULL default '', `nomDestination3` varchar(255) NOT NULL default '', KEY `id_auto` (`id_auto`) ) TYPE=MyISAM AUTO_INCREMENT=18 ; CREATE TABLE `fk_moto` ( `id` int(5) NOT NULL auto_increment, `pseudom` varchar(50) NOT NULL default '', `annee` varchar(4) NOT NULL default '', `kilometrage` varchar(30) NOT NULL default '', `prix` varchar(30) NOT NULL default '', `cylindree` varchar(30) NOT NULL default '', `description` longtext NOT NULL, `marque` varchar(30) NOT NULL default '', `modele` varchar(30) NOT NULL default '', `types_annonceur` varchar(15) NOT NULL default '', `departement` varchar(100) NOT NULL default '', `ville` varchar(100) NOT NULL default '', `web` varchar(255) NOT NULL default '', `tel` varchar(20) NOT NULL default '', `emailm` varchar(50) NOT NULL default '', `mobile` varchar(15) NOT NULL default '', `date` varchar(10) NOT NULL default '', `heure` varchar(10) NOT NULL default '', `nomDestination1` varchar(255) NOT NULL default '', `nomDestination2` varchar(255) NOT NULL default '', `nomDestination3` varchar(255) NOT NULL default '', KEY `id` (`id`) ) TYPE=MyISAM AUTO_INCREMENT=8 ; CREATE TABLE `fk_offre_emploi` ( `id` mediumint(4) NOT NULL auto_increment, `pseudom` varchar(255) NOT NULL default '', `secteur_activite` varchar(255) NOT NULL default '', `fonction` varchar(255) NOT NULL default '', `societe` varchar(255) NOT NULL default '', `profil_rechercher` longtext NOT NULL, `profil_entreprise` longtext NOT NULL, `reference` varchar(255) NOT NULL default '', `lieu` varchar(255) NOT NULL default '', `type_de_contrat` varchar(255) NOT NULL default '', `debut` varchar(255) NOT NULL default '', `salaire` varchar(255) NOT NULL default '', `contact` varchar(255) NOT NULL default '', `adresse_societe` varchar(255) NOT NULL default '', `tel` varchar(50) NOT NULL default '', `fax` varchar(50) NOT NULL default '', `emailm` varchar(250) NOT NULL default '', `web` varchar(255) NOT NULL default '', `date` varchar(50) NOT NULL default '', `heure` varchar(30) NOT NULL default '', `nom_fichier` varchar(255) NOT NULL default '', UNIQUE KEY `id` (`id`), FULLTEXT KEY `pseudom` (`pseudom`), ) TYPE=MyISAM AUTO_INCREMENT=45 ; CREATE TABLE `fk_produits` ( `id` mediumint(5) NOT NULL auto_increment, `pseudom` varchar(255) NOT NULL default '', `rub` varchar(255) NOT NULL default '', `cat` varchar(255) NOT NULL default '', `titre` varchar(255) NOT NULL default '', `prix` varchar(15) NOT NULL default '', `departement` varchar(50) NOT NULL default '', `ville` varchar(50) NOT NULL default '', `description` longtext NOT NULL, `tel` varchar(20) NOT NULL default '', `mobile` varchar(20) NOT NULL default '', `web` varchar(255) NOT NULL default '', `emailm` varchar(255) NOT NULL default '', `date` varchar(15) NOT NULL default '', `heure` varchar(15) NOT NULL default '', `nomDestination1` varchar(255) NOT NULL default '', `nomDestination2` varchar(255) NOT NULL default '', `nomDestination3` varchar(255) NOT NULL default '', KEY `id` (`id`) ) TYPE=MyISAM AUTO_INCREMENT=47 ;
Merci