2013-12-08 41 views
1

我想查询4号人的朋友的姓名,所以'otherPerson_id'中的数字,但我只尝试查询'person_id'中的ID或名称。我怎么能要求查询关于第四人的朋友的信息,而不是关于第四人的信息呢?如何查询JOIN表的第二列?

这里是我的尝试:

$q = "SELECT DISTINCT p.idperson, p.name FROM person p INNER JOIN people_friends pf ON p.idperson = pf.person_id AND p.idperson = 4"; 
     $res = $connexion->query($q); 
     $res->setFetchMode(PDO::FETCH_COLUMN); 
     while($record = $res->fetch()) { 
      echo $record[name]; 
      echo "<br/>"; 
     } 

表:(所以当我寻找的人的朋友N°4,我想它返回1和7)

enter image description here

编辑:

CREATE TABLE people_friends 
(
    person_id integer NOT NULL, 
    otherperson_id integer NOT NULL, 
    CONSTRAINT people_friends_pkey PRIMARY KEY (person_id, otherperson_id), 
    CONSTRAINT people_friends_person_id_fkey FOREIGN KEY (person_id) 
     REFERENCES person (idperson) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION, 
    CONSTRAINT people_friends_person_id_fkey1 FOREIGN KEY (person_id) 
     REFERENCES person (idperson) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION 
) 



CREATE TABLE person 
(
    idperson integer NOT NULL, 
    name character varying(50), 
    map bytea, 
    CONSTRAINT person_pkey PRIMARY KEY (idperson) 
) 

感谢

+0

我想我们需要person和people_friends表的模式。 –

+0

....... ON p.idperson = pf.person_id AND(p.idperson = 4或pf.person_id = 4)。您可以尝试替换连续查询。 – NavaStha

+0

罗保罗是对的。这取决于表结构。例如,'people_friends'表中的'name'是否可用? – Drumbeg

回答

2

试试这个查询。

SELECT DISTINCT 

pFriend.idperson, pFriend.name 

FROM people_friends pf 

INNER JOIN person pFriend on pf.otherperson_id = pFriend.idperson 

WHERE 

pf.person_id = 4 
+0

我试过这个,但它不起作用(它不返回任何东西,就好像有错误,页面是空白的)。我编辑了我的帖子,如果这可以帮助。 – Paul

+0

在MySQL查询浏览器中试一下,看看它在那里返回什么,或者你在那里得到什么错误。我的查询应该给你你想要的东西,这是一个非常简单的查询顺便说一句,你需要。 –

+0

@peterPetrov你是对的,我忘了分号:)它工作正常,非常感谢 – Paul

0

您只需在检查pf表的位置添加WHERE子句。

SELECT DISTINCT p.idperson 
       ,p.name 
FROM person p 
    INNER JOIN people_friends pf 
    ON p.idperson = pf.person_id 
WHERE pf.otherperson_id = 4 
+0

我不认为这是正确的。他希望返回1和7的'otherperson_id',代替4的person_id。 – Drumbeg

相关问题