2009-06-20 6 views
0

Table estate_common -> données communes pour les biens comme nom de titre, etc. immobiliers pourraient différer en nature par exemple type 1 - type plat 2 - maison etc.mysql recherche sur deux tables avec une sorte de jointure interne

id | kind | title  | name 
596 | 1 | title 596 | name 596 
597 | 1 | title 597 | some 597 
598 | 1 | title 598 | some 598 
599 | 1 | title 599 | some 599 
600 | 1 | title 600 | some 600 
601 | 5 | title 607 | some 601 

Table estate_kind_1 -> de données spécifiques pour chaque type differnet estate_kind_# comporte des colonnes de structure differnet etc.

id | estate_common_id | floor | flat | shell 
1 | 596    | 250 | 9b | pvc 
2 | 597    | 156 | 10c | abc 
3 | 598    | 126 | 12a | csd 
4 | 599    | 226 | 2a | add 
5 | 600    | 198 | 15o | fdd 

id de estate_common est égale estate_common_id de estate_kind_# lequelR # est le nombre de kind de la table estate_common

avant de préparer la requête je sais que je dois combiner les données de la table estate_common et estate_kind_1

pour simple détail de la succession avec les données des deux tables faciles

ESt
SELECT `common`.*, `kind`.* FROM `estate_common` AS `common` INNER JOIN `estate_kind_1` AS `kind` ON common.id = kind.estate_common_id WHERE (common.id = '597') 

mais maintenant je commence à faire une exportation XML et doivent sélectionner des données à la fois un moyen de table estate_common et estate_kind_1 lors de la sélection de estate_common id´s

si requête comme ceci

SELECT `common`.*, `kind`.* FROM `estate_common` AS `common`, `estate_kind_1` AS `kind` WHERE (common.id IN ('596,597')) 

mais il me donne le résultat étrange

id | kind | title  | name  | id | estate_common_id | floor | flat | shell 
596 | 1 | title 596 | name 596 | 1 | 596    | 250 | 9b | pvc 
596 | 1 | title 596 | name 596 | 2 | 597    | 156 | 10c | abc 

données de la table estate_kind_1 signifie avec id 1 a 2 sur le côté droit sont ok, mais à gauche de estate_common sont à la fois lignes identiques

doit être

id | kind | title  | name | id | estate_common_id | floor | flat | shell 
596 | 1 | title 596 | name 596 | 1 | 596    | 250 | 9b | pvc 
597 | 1 | title 597 | name 597 | 2 | 597    | 156 | 10c | abc 

i essayé groupe par etc. distincts mais probablement mauvaise façon se fera un plaisir pour toute aide

grâce

Répondre

1

Votre dernière requête n'a pas JOIN explicite si un INNER JOIN est fait. Comme il n'y a pas de clause ON, ce qui se passe est un produit croisé complet avec une restriction sur une table. Le résultat que vous devriez obtenir est que pour chaque ligne de kind vous aurez deux résultats - un pour 596 de common et un pour 597.

Je suppose que vous avez recadré le résultat à 2 lignes.

La requête que vous voulez est:

SELECT `common`.*, `kind`.* 
    FROM `estate_common` AS `common`, `estate_kind_1` AS `kind` 
    ON common.id = kind.estate_common_id 
    WHERE (common.id IN ('596,597')); 
0

Je dois manquer quelque chose au sujet de votre question. c'est ce que tu veux?

SELECT `common`.*, `kind`.* 
FROM `estate_common` AS `common` 
    INNER JOIN `estate_kind_1` AS `kind` ON common.id = kind.estate_common_id 
WHERE common.id IN ('596,597') 
+0

SELECT 'common'. *,' Kind'.* FROM 'estate_common' AS' common' INNER JOIN 'estate_kind_5' AS' kind' sur common.id = kind.estate_common_id OERE (common.id IN ('596,597')) comme on pouvait le voir dans le dernier blokc de ma question donne juste une rangée - avec common.id 596 qui était la première idée. i neadd de sélectionner 596 et 597 données de la table –

+0

dans la requête devrait être break_kind_1 au lieu de estate_kind_5 comme je l'ai posté il y a quelques instants je viens d'avoir différentes tables sur mon localhost –

0
solution

est simple, vraiment

SELECT common.*, kind.* FROM estate_common common, estate_kind_1 kind WHERE common.id = kind.estate_common_id AND (common.id IN (596,597)) 
Questions connexes