1

現在、3 つの mysql テーブルがあります。テーブルにすべての人をリストする必要がpeopleあります。この横に興味があることを示しています。これがその sql です。

SELECT *,(
           SELECT GROUP_CONCAT(interest_id SEPARATOR ",")
           FROM cat_people_interests
           WHERE person_id = people.id
         ) AS cat_interests
FROM people
WHERE id IN 
(
    SELECT person_id
    FROM cat_interests
)
ORDER BY lastname, firstname);

スキーマ

`people` { int:id, varchar:name }
`cat_people_interests` { int:interest_id, int:person_id }
`cat_interests` { int:id, varchar:name }
`alternate_meow_pull` { int:person_id, int:meow_id, int:dataetc, int:dataetc2 }

したがって、これにより、そこに名前とすべての興味を引き出すことができます。

個人の ID が別のテーブル (alternate_meow_pull) に person_id として存在するかどうかを行ごとに確認するために、これを変更または追加するにはどうすればよいですか? 私が個人的に行うことは、各行で mysql クエリを確認することですが、より高速で簡潔な方法があると確信しています。ところで、alternate_meow_pull にその人物が存在するかどうかに関係なく、結果を取得したいと考えています。

したがって、この結果をループするときに、名前、ID、個人に関連するすべての興味、個人に関連するalternate_meow_pull にあるすべてのデータを出力できるようにしたいと考えています。

4

2 に答える 2

1

こんなはずじゃないの?

SELECT  a.name, 
        GROUP_CONCAT(b.name) InterestList
FROM    people  a
        INNER JOIN cat_people_interest c
            ON a.ID = c.person_ID
        INNER JOIN cat_interests b
            ON b.id = c.interest_ID 
        INNER JOIN alternate_meow_pull d
            ON a.person_ID = d.person_id
WHERE   b.interest_id = '$_POST['showinterest_id']'
GROUP BY a.name

ID存在する人物の名前alternate_meow_pullのみが表示されます。

于 2012-09-19T07:29:14.973 に答える
1
 SELECT people.id, people.name
 FROM people,cat_people_interests as c,cat_interests as i, alternate_meow_pull as m
 WHERE people.id = c.person_id or people.id = i.id or people.id = m.person_id
于 2012-09-19T07:39:23.760 に答える