2

重複の可能性:
2 つの Post/Category テーブル MYSQL SELECT クエリを 1 つに結合する方法

2 つの MYSQL クエリがあります。

1) "SELECT ID,post_title,post_category,post_perma FROM ".TBL_POSTS."
   WHERE  published='1' AND page='0' ORDER BY  ID ASC LIMIT 50"

2) "SELECT p.cat_ID,p.cat_nicename FROM ".TBL_CATEGORIES." n, 
   ".TBL_CATEGORIES." p
   WHERE n.lft BETWEEN p.lft 
   AND p.rgt AND n.cat_ID='".post_category."' ORDER BY p.lft

私はこのように使用します:

$sql="SELECT ID, post_title, post_category,post_perma 
      FROM ".TBL_POSTS." 
      WHERE  published='1' 
      AND page='0' 
      ORDER BY ID ASC LIMIT 50";

$result=mysql_query($sql);

while($row=mysql_fetch_assoc($result)){

$sql2="SELECT p.cat_ID, p.cat_nicename 
       FROM ".TBL_CATEGORIES." n, ".TBL_CATEGORIES." p 
       WHERE n.lft BETWEEN p.lft 
       AND p.rgt 
       AND n.cat_ID='".$row['post_category']."' 
       ORDER BY p.lft";

    $result2=mysql_query($sql2);

    while($row2=mysql_fetch_assoc($result2)){
        $path.='/'.$row2['cat_nicename'];
    }

    $link.='<a href="'.$path.'">'.$row['post_title'].'</a><br>';
    $path='';

}
echo($link);
exit;

}

これは、リンクでパスを取得する方法です..今、私が欲しいのは:

両方のクエリを組み合わせて、while ループで 2 番目のクエリを実行しないようにします。100 件の投稿を受信すると、2 番目のクエリが 100 回実行されてパスが取得されるため、非常に悪くなります。

4

3 に答える 3

1

JOIN次のように 2 つのテーブルを作成できます。

SELECT 
  p.ID, 
  p.post_title,  
  c.cat_nicename, 
  p.post_perma 
FROM       TBL_POSTS p
INNER JOIN TBL_CATEGORIES c 
        ON p.CategoryID = c.Cat_ID
WHERE      p.published = '1' 
  AND      p.page = '0' 
ORDER BY   p.ID ASC 
 LIMIT 50
于 2012-10-19T12:27:35.313 に答える
0

UNION を使用して、それらすべてを 1 つのクエリに結合できます。

本当に、すべての列が互いに結合されないように、このようなことをする必要があります。また、両方の select ステートメントで、選択される列の数が同じである必要があります。

編集: また、MySQL UNION では、order by を 1 つしか持てず、最後の SELECT に含める必要があるため、それに応じてクエリを調整する必要があります。

 (SELECT    ID, 
    post_title, 
    post_category, 
    post_perma, 
    NULL AS cat_id,
    NULL AS cat_nicename
  FROM ".TBL_POSTS."
  WHERE   published='1' 
  AND   page='0')
  ORDER BY  ID ASC LIMIT 50
UNION
(SELECT 
     NULL AS ID, 
     NULL AS post_title, 
     NULL AS post_category, 
     NULL AS post_perma, 
     p.cat_ID, 
     p.cat_nicename 
FROM ".TBL_CATEGORIES." n, 
     ".TBL_CATEGORIES." p
WHERE n.cat_ID='".post_category."' 
AND n.lft BETWEEN p.lft AND p.rgt)
ORDER BY p.lft
于 2012-10-19T12:27:41.077 に答える
0

MySql JOINまたはUNIONを使用してみてください

于 2012-10-19T12:29:06.357 に答える