Php 组合两个MYSQL SELECT查询

Php 组合两个MYSQL SELECT查询,php,mysql,Php,Mysql,可能重复: 我有两个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

可能重复:

我有两个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;

}
$sql=“选择ID、帖子标题、帖子类别、帖子主题
来自“.TBL_POSTS”
发布地点:='1'
和page='0'
按ID订购ASC限制50”;
$result=mysql\u查询($sql);
while($row=mysql\u fetch\u assoc($result)){
$sql2=“选择p.cat\u ID,p.cat\u名称
从“.TBL_类别”n、“.TBL_类别”p
其中n.lft在p.lft之间
和p.rgt
和n.cat_ID=“$row['post_category']”
由p.lft订购”;
$result2=mysql\u查询($sql2);
而($row2=mysql\u fetch\u assoc($result2)){
$path.='/'.$row2['cat_nicename'];
}
$link.='
'; $path=''; } echo($link); 出口 }
这就是我在链接中获取路径的方式。。现在我想要的是:

我想合并这两个查询,这样我就不会在while循环中运行第二个查询。。
它变得非常糟糕,因为如果我收到100个帖子。。第二个查询将运行100次以获取路径。

您可以
将两个表连接起来,如下所示:

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

您可以使用一个联合来将它们组合到一个查询中

实际上,您需要这样做,这样所有的列就不会相互合并。此外,两个select语句需要选择相同数量的列

编辑:另外,在MySQL UNION中,您只能有1个order by,并且它必须位于最后一个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

尝试使用MySql或

否。它以前不起作用。。表示“使用的SELECT语句具有不同的列数”,即使我按原样尝试您的查询。。它说“UNION和ORDER BY的用法不正确”,您的SQL语法中有一个错误;检查与您的MySQL服务器版本对应的手册,以了解可在“post_title,post_category,post_perma,NULL,NULL FROM tbl_posts WHERE”附近使用的正确语法,其中“在第1行,我错过了别名“p”,只是添加了它。还有一个随机的AS-after-ID。很抱歉,“UNION和ORDER-BY的用法不正确”再次出现同样的错误:(我对UNION不熟悉,否则我会自己解决它:(如果您想只显示链接,就像您的示例一样,请使用内部联接。否则,如果您还需要显示第一个查询的某些结果,即使第二个查询没有返回任何结果,也请使用左外部联接。您注意到“链接”了吗是否在第二个嵌套的while循环中生成?这不仅仅是一个查询。.在第二个while循环中,它获取数组中的子-父关系,然后生成路径。.在您的查询中,我将只获取一个“Last”类别名称。.您是否得到了buddy,我正试图解释?