1

私は3つのテーブルを持っています:

  1. post(id) - すべてのエントリがあります
  2. tag(id) - すべてのタグを持っています
  3. assign(post_id,tag_id) - 投稿にタグを割り当てます。投稿には複数の行がある場合があります

これは私がこれまでに持っているものです:

$sql_post = mysql_query("SELECT title,content,time,web FROM post ORDER BY time DESC LIMIT 5");

$sql_tag = mysql_query("SELECT tag.name,tag.id,post.id FROM assign LEFT JOIN tag ON assign.tag_id=tag.id LEFT JOIN post ON assign.post_id=post.id WHERE post.time>(SELECT MIN (time) FROM (SELECT time FROM post ORDER BY time DESC LIMIT 6) two)");

私はそれをすべて1つの大きな配列に入れることを考えていたので、次のようなものです(ずさんな要約):

array(
    post_id => array(
        "title" => "post's title...",
        "content" => "post's content...",
        "tag" => array(
            tag_id => "tag 1's name",
            tag_id => "tag 2's name

...そして、foreach を使用してブログに表示します。

助けが必要なのは の sql です$sql_tag。最新の 5 件の投稿のすべての割り当てを選択するようにするにはどうすればよいですか? 投稿に対して 1 つのタグのみを選択します。

4

2 に答える 2

0

興味のある投稿をループしてみませんか?

$sql_post = mysql_query("SELECT id, title,content,time,web FROM post ORDER BY time DESC LIMIT 5");

while ($row = mysql_fetch_assoc($sql_post)) {
     $sql_tag = mysql_query("SELECT tag.name,post.id FROM assign LEFT JOIN tag ON assign.tag_id=tag.id WHERE assign.post_id='".$row['id']."'");
}
于 2012-06-17T19:13:06.027 に答える
0

試す:

SELECT
    c.id,
    c.name,
    a.id
FROM
    (
        SELECT id
        FROM post
        ORDER BY time DESC
        LIMIT 5
    ) a
LEFT JOIN
    assign b ON a.id = b.post_id
LEFT JOIN
    tag c ON b.tag_id = c.id
于 2012-06-17T19:31:06.253 に答える