【问题标题】:How to combine two Post/Category tables MYSQL SELECT queries into one如何将两个 Post/Category 表 MYSQL SELECT 查询合并为一个
【发布时间】:2012-10-19 10:16:49
【问题描述】:

我有两个 MySQL 查询:

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

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

第一个查询选择帖子,然后第二个通过post_category 选择类别的路径请注意post_category 将取自第一个查询意味着post_category 在两个表中都很常见.. 在第一个表中它被命名为post_category,第二个是cat_ID

现在我在 foreach 循环中运行它,这并不好。还有一件事需要注意的是,第二个查询也将返回 Array 并且一个数组应该对应于post_category

任何 SQL 专家可以帮助我吗?

多谢

【问题讨论】:

  • 请您详细说明表结构吗?
  • 我试过了..但无法得到想要的结果..你能给我举个例子吗?
  • 请用您尝试过的内容编辑问题?
  • 我尝试过的查询与@Danny Hearnah 给出的相同。我只得到了最后一个 cat_nicename 而我需要从第二个表中获得一组路径

标签: php mysql


【解决方案1】:

请试试这个,它可能对你有帮助。

SELECT a.ID, a.post_title,a.post_category,a.post_perma, b.cat_ID, b.cat_nickname
FROM  (SELECT ID,post_title,post_category,post_perma FROM ".TBL_POSTS." WHERE  published='1' AND page='0' ORDER BY  ID DESC LIMIT 10)  a
LEFT   JOIN (SELECT p.cat_ID as cat_ID,p.cat_nicename as cat_nickname 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) b ON a.ID = b.cat_ID

【讨论】:

  • 嗨.. 当我将 $post_category 更改为 a.post_category 时,它说 a.post_category 是未知列.. $post_category 不是变量.. 当我从第一个获取 post_category 时使用它查询..虽然在这里它应该只与 TBL_POST 链接.. :(
  • 是的,它当然可以工作.. 我已经在这里详细发布了我的问题.. stackoverflow.com/questions/12974224/… 请看看哥们.. 非常感谢:)
【解决方案2】:

我会使用 LEFT JOIN

像这样:

$sql = "SELECT `p`.`ID`,`p`.`post_title`,`p`.`post_category`,`p`.`post_perma`,`c`.`cat_ID`,`c`.`cat_nicename` FROM `".TBL_POSTS."` AS `p` ";
$sql .= "LEFT JOIN `".TBL_CATEGORIES."` AS `c` ON `c`.`cat_ID`=`p`.`post_category` WHERE `p`.`published`='1' AND `p`.`page`='0' ORDER BY `p`.`ID` DESC LIMIT 10";

您可能需要调整 WHERE 子句以满足您的更多需求..

请注意:这是一个字符串,我只是将它们分成两行,以便于阅读。 .= 是追加当前字符串。

【讨论】:

  • 嗨..谢谢您的回答..但是您的查询有问题..在您的选择中,它只选择了最后一个cat_nicename,而在我的第二个查询中..我得到了数组中的 cat_nicename .. 这样我就可以创建返回类别的路径 .. 得到我吗?
  • 啊,是的,我没看到 - 抱歉,看看@Suryawanshi Manoj 的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-27
相关资源
最近更新 更多