2011-10-18 4 views
-1

J'ai deux tables tour_foreign & tour_foreign_residence dans la base de données et que vous souhaitez fusion cette table deux ensemble qui obtiennent la sortie du code PHP comme exemple suivant:Combinaison de plusieurs tables de base de données ensemble?

Mes tables et les valeurs qu'elle:

enter image description here enter image description here

I voulez obtenir comme sortie tour_foreign.id = tour_foreign_residence.relation:

One-week tour of Istanbul_1 | 88888 & 99999 $ 112233 $ 445566 | Three nights and two days | 15:29
One-week tour of Istanbul_2 | 55555 & 66666 $ 77777 | Three nights and two days | 12:03
One-week tour of Istanbul_3 | 11111 & 22222 $ 33333 $ 44444 | Three nights and two days | 12:03

Mon essai est cela, mais il ne donne pas à moi ce que je veux en haut:

$this -> db -> query(" 
    SELECT 
      @rownum := @rownum + 1 rownum, 
      tour_foreign.id, 
      tour_foreign.name, 
      tour_foreign_residence.name_re, 
      tour_foreign.term, 
      tour_foreign.time_go, 
      tour_foreign.time_back, 
      tour_foreign.type_of_vehicle 
    FROM tour_foreign 
      INNER JOIN tour_foreign_residence 
      ON (tour_foreign.id = tour_foreign_residence.relation) 
      JOIN (SELECT @rownum := 0) r 
    WHERE tour_foreign.name LIKE "%' . $find . '%" 
      OR tour_foreign_residence.name_re LIKE "%' . $find . '%"  
") 

Comment résoudre ce problème?

Répondre

0

Essayez d'utiliser GROUP_CONCAT() pour rejoindre les noms de vous tour_foreign_residence tableau

+0

S'il vous plaît dites-moi, comment est-ce dans mon code? –

+0

Je ne peux pas tester votre requête réelle, mais vous pouvez commencer en ajoutant ceci à votre instruction SELECT: GROUP_CONCAT (tour_foreign_residence.name_re ORDER BY tour_foreign_residence.name_re SEPERATOR "$") –

+0

Je l'ajoute après WHERE mais j'obtiens cette erreur: 'Erreur Number: 1064 Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'GROUP_CONCAT (tour_foreign_residence.name_re ORDER BY tour_foreign_residence.nam' à la ligne 18' –

0

Je ne sais pas pourquoi vous joindrez sur @rownum, il pourrait être de jouer avec votre jeu de résultats. Essayez de le sortir et voir si cela fonctionne. Votre jointure interne semble correcte, sauf que je ne l'ai jamais vu avec les parens enveloppés, mais je suppose que cela fonctionnera comme prévu. Pour tester votre requête, vous pouvez supprimer le complexe où la clause et vient de mettre quelque chose comme où tour_foreign.id = 1.

Quelque chose comme:

SELECT 
    tf.* 
FROM 
    tour_foreign AS tf 
INNER JOIN 
    tour_foreign_residence AS tfr 
ON 
    tfr.relation = tf.id 
WHERE 
    tf.id = 1 

I mis en œuvre des alias pour vos noms de table plus (tf, et TFR) car ils sont plus faciles à travailler.

+0

ne fonctionnent pas de cela, il a erreur: 'Numéro d'erreur:. 1051, une table inconnue 'tour_foreign', SELECT * FROM tour_foreign tour_foreign AS tf INNER JOIN tour_foreign_residence AS tfr ON tfr.relation = tf.id O t tf.id = 1' –

+0

@Nicole: Désolé, besoin d'utiliser l'alias. J'ai édité le sql pour refléter le changement. –

+0

Je l'utilise comme:. '$ Query = $ this -> db -> query (» SELECT \t \t * tf DE tour_foreign AS tf INNER JOIN tour_foreign_residence AS TFR SUR tfr.relation = tf. id O WH tf.id = 1 ");' est-ce sans erreur mais n'a pas de sortie? –

Questions connexes