Page 1 sur 1

Une requête pour plusieurs tables

Posté : 25 oct. 2005, 11:41
par pingoo
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

Posté : 25 oct. 2005, 11:50
par zeus
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 ;)

Posté : 03 nov. 2005, 18:00
par Invité
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.

Posté : 03 nov. 2005, 18:04
par rami
Avant de vouloir une requete, dis nous ce que tu souhaites faire. Tu veux sélectionner toutes les lignes de tes 4 tables?

Posté : 03 nov. 2005, 18:09
par pingoo
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.

Posté : 03 nov. 2005, 20:15
par pingoo
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

Posté : 03 nov. 2005, 21:23
par jeff
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

Posté : 03 nov. 2005, 21:33
par pingoo
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