Problème de select multiples dans plusieurs tables

superseb801 Messages postés 4 Date d'inscription mercredi 18 janvier 2006 Statut Membre Dernière intervention 18 janvier 2008 - 9 mai 2007 à 08:39
superseb801 Messages postés 4 Date d'inscription mercredi 18 janvier 2006 Statut Membre Dernière intervention 18 janvier 2008 - 10 mai 2007 à 02:23
bonjour,


J'ai un problème, je voudrais faire une requête sur plusieurs tables en
même temps (3 pour être plus précis), et avec d'autres SELECT dans le
WHERE (excusez-moi pour le vocabulaire).


voici la requête : $query = "SELECT * FROM premise_price AS t1,
building_price AS t2, room_price AS t3 WHERE ((t1.priority='999') AND
(t1.premise_id='".$pid."')) || ((t2.priority='999') AND (t2.building_id
IN (SELECT building.building_id FROM building WHERE
building.premise_id='".$pid."'))) || ((t3.priority='999') AND
(t3.room_id IN (SELECT room.room_id FROM room WHERE room.building_id IN
(SELECT building.building_id FROM building WHERE
building.premise_id='".$pid."'))))";


bon ok je vous l'accorde elle est pas courte.

Le problème est que la requete m'affiche des valeurs qui ne devraient
pas, plus précisément le problème est pour la prise en compte du
t3.priority='999'. Lorsque je retire l'une des condition, comme ça :

$query = "SELECT * FROM premise_price AS t1, building_price AS t2,
room_price AS t3 WHERE ((t1.priority='999') AND
(t1.premise_id='".$pid."')) || ((t3.priority='999') AND (t3.room_id IN
(SELECT room.room_id FROM room WHERE room.building_id IN (SELECT
building.building_id FROM building WHERE
building.premise_id='".$pid."'))))";

la requête ne m'affiche plus les valeurs que je ne veux pas, donc tout
va bien, mais dès que je remet la requete que je veux (la première) les
valeurs que je ne veux pas sont réafficher!


Je suis complêtement perdu, si quelqu'un a une idée ??!!

1 réponse

superseb801 Messages postés 4 Date d'inscription mercredi 18 janvier 2006 Statut Membre Dernière intervention 18 janvier 2008
10 mai 2007 à 02:23
Bon alors étant en manque de temps j'ai fini par adopté une solution
plus simple, mais plus longue, j'ai divisé ma requête en trois et j'ai
créer une fonction qui me range les informations des trois requêtes
dans un seul tableau.


Voici les trois requêtes avec l'appel à la fonction :

$query1 = "SELECT * FROM premise_price WHERE (priority='999') AND (premise_id='".$pid."')";

getPriceInformation($query1,'premise');

$query2 = "SELECT * FROM building_price WHERE (priority='999') AND
(building_id IN (SELECT building.building_id FROM building WHERE
building.premise_id='".$pid."'))";

getPriceInformation($query2,'building');

$query3 = "SELECT * FROM room_price WHERE (priority='999') AND (room_id
IN (SELECT room.room_id FROM room WHERE room.building_id IN (SELECT
building.building_id FROM building WHERE
building.premise_id='".$pid."')))";

getPriceInformation($query3,'room');


et voici la fonction, qui evidemment utilise des variables globales pour tout mettre dans un seul tableau :

function getPriceInformation($query,$type) {

global $table_price,$count_price;

$result = mysql_query($query);

$datatemp = mysql_fetch_array($result);

if ($datatemp != "") {

$result = mysql_query($query);

while ($data = mysql_fetch_array($result)) {

$table_price[$count_price]['type'] = $type;

$table_price[$count_price]['price_id'] = $data['price_id'];

$table_price[$count_price][$type.'_id'] = $data[$type.'_id'];

$table_price[$count_price]['cost'] = $data['cost'];

$table_price[$count_price]['month'] = $data['month'];

$table_price[$count_price]['date'] = $data['date'];

$table_price[$count_price]['month2'] = $data['month2'];

$table_price[$count_price]['date2'] = $data['date2'];

$table_price[$count_price]['stop'] = $data['stop'];

$table_price[$count_price]['code'] = $data['code'];

$table_price[$count_price]['year'] = $data['year'];

$count++;

}

}

}


Pour la petite histoire je travaille seul sur un site anglais où déjà 3
developpeurs différents sont passés (un australien, un coréen et un
français), je peux vous dire qu'il faut du courage pour décrypter le
code !!!
0
Rejoignez-nous