Bonjour,

je veux faire une requete INNER JOIN sur ma base en donnant un des SELECT DISTINCT pour que tout ne sois pas recherché a chaque fois par identifiant.

La requete est du type :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
("
SELECT DISTINCT * FROM `lot` 
INNER JOIN (SELECT DISTINCT * FROM programme WHERE programme.Id = lot.Id_programme) 
WHERE Id_region LIKE 'O' 
AND Id_fiscalite LIKE 'ROB' 
AND Id_genre LIKE 'APPA' 
AND Prix_base BETWEEN '0' 
AND '200' 
")
Mais il me fait la recherche pour chaque Id qu'il trouve dans la table lot.

les tables concernées :

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
CREATE TABLE `programme` (
  `Id` int(11) NOT NULL auto_increment,
  `Nom` varchar(255) collate utf8_unicode_ci NOT NULL,
  `Adresse` varchar(255) collate utf8_unicode_ci default NULL,
  `Cp` varchar(5) collate utf8_unicode_ci NOT NULL,
  `Ville` varchar(70) collate utf8_unicode_ci NOT NULL,
  `Id_region` varchar(5) collate utf8_unicode_ci NOT NULL,
  `Date_comm` varchar(255) collate utf8_unicode_ci default NULL,
  `Date_livraison` varchar(255) collate utf8_unicode_ci default NULL,
  `Date_signature` varchar(255) collate utf8_unicode_ci default NULL,
  `Id_fiscalite` varchar(5) collate utf8_unicode_ci NOT NULL,
  `Presentation` text collate utf8_unicode_ci,
  `Photo_0` varchar(255) collate utf8_unicode_ci default NULL,
  `Photo_1` varchar(255) collate utf8_unicode_ci default NULL,
  `Photo_2` varchar(255) collate utf8_unicode_ci default NULL,
  UNIQUE KEY `Id` (`Id`),
  KEY `id_region` (`Id_region`),
  KEY `id_fiscalite` (`Id_fiscalite`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ;
et

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
CREATE TABLE `lot` (
  `Id` int(11) NOT NULL auto_increment,
  `Id_programme` int(11) NOT NULL,
  `Code` varchar(10) collate utf8_unicode_ci NOT NULL,
  `Etage` int(2) default NULL,
  `Rentabilite` float default NULL,
  `Id_genre` varchar(5) collate utf8_unicode_ci NOT NULL,
  `Id_orientation` varchar(5) collate utf8_unicode_ci NOT NULL,
  `Id_type` varchar(5) collate utf8_unicode_ci NOT NULL,
  `Surface_total` float default NULL,
  `Surface_hab` float default NULL,
  `Prix_base` float default NULL,
  `Prix_pack2` float default NULL,
  `Loyer_mensuel` float default NULL,
  `Loyer_borloo` float default NULL,
  `Loyer_robien` float default NULL,
  `Infos_supp` text collate utf8_unicode_ci NOT NULL,
  `Id_etat` enum('signature','uncom','option','fax','reserv','disponible') collate utf8_unicode_ci NOT NULL default 'disponible',
  `Date_chgmt_etat` datetime default NULL,
  `Livraison` varchar(255) collate utf8_unicode_ci default NULL,
  `Id_vendeur` int(11) NOT NULL,
  `Nom_vendeur` varchar(255) collate utf8_unicode_ci default NULL,
  `Acheteur` varchar(255) collate utf8_unicode_ci default NULL,
  PRIMARY KEY  (`Id`),
  KEY `id_programme` (`Id_programme`),
  KEY `id_genre` (`Id_genre`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ;
La fonction :



[php]function Lister_Lots($Option1,$Option2,$Option3,$Prix_min,$Prix_max)
{

$Req_Liste_Lot = mysql_query("
SELECT * FROM `lot`
INNER JOIN programme ON (programme.Id = lot.Id_programme)
WHERE Id_region LIKE '".$Option2."'
AND Id_fiscalite LIKE '".$Option1."'
AND Id_genre LIKE '".$Option3."'
AND Prix_base BETWEEN '".$Prix_min."'
AND '".$Prix_max."' ") or die(mysql_error());

while($Array_Liste_Lot = mysql_fetch_array($Req_Liste_Lot))
{
?>
<tr>
<td><?php echo $Array_Liste_Lot['Cp']; ?></td>
<td><?php echo $Array_Liste_Lot['Ville']; ?></td>
<td><?php echo $Array_Liste_Lot['Id']; ?></td>
<td><?php echo $Array_Liste_Lot['Id_type']; ?></td>
<td><?php echo $Array_Liste_Lot['Id_genre']; ?></td>
<td><?php echo $Array_Liste_Lot['Etage']; ?></td>
<td><?php echo $Array_Liste_Lot['Id_etat']; ?></td>
<td><?php echo $Array_Liste_Lot['Prix_base']; ?></td>
<td><?php echo $Array_Liste_Lot['Loyer_mensuel']; ?></td>
</tr>

<?php
}
}[/php]



EDIT REPONSE TROUVER

j'avais omis de faire les groupes

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
SELECT * FROM `lot` 
INNER JOIN programme ON (programme.Id = lot.Id_programme)
WHERE Id_region LIKE '".$Option2."' 
AND Id_fiscalite LIKE '".$Option1."'
AND Id_genre LIKE '".$Option3."'
AND Prix_base BETWEEN '".$Prix_min."' 
AND '".$Prix_max."' GROUP BY Id_programme