mysql - 艰难的 mysql 嵌套表结果挑战

标签 mysql nested

我正在使用 wordpress 为我的插件制作 API,jquery 用来填充表格。需要帮助弄清楚我将如何做到这一点。

第一个查询,这将获取“父”帖子:

[q1]: Select * from posts as p where p.ID IN ({SomeIDs I am requesting})

第二个查询,这将得到第一个的所有 child :

[q2]: Select * from posts as p where p.parent_postID IN ({the parentIDs from q1})

我怎样才能运行这个查询,以便结果是一个输出。我不想每次要显示子项时都必须继续运行第二个查询(子项默认显示,我的想法是这样我就可以限制第一个查询)。

最终结果:

_________________________________________________
| ID   | post_parent | title      | disruption  |
-------------------------------------------------
| 894  |           0 | main title | main disc   |
| 898  |         894 | diff title | diff disc   |
| 907  |         894 | diff tilte | diff disc   |
| 910  |           0 | Main title | main disc   |
| 916  |         910 | diff title | diff disc   |
| 919  |           0 | Main title | Main disc   | 
-------------------------------------------------

您会注意到 ID 919 没有 child ,我仍然希望它显示在结果中。

所以我尝试加入,我会丢失没有 ID = post_parentID 的记录,除非我可以做另一种类型的加入...

想法是 q1 上的“LIMIT”,组合结果按 q2 排序,然后在制作表格时 jQuerys forloop 的结果只会改变 <TR> 的 bg如果 ID 和 post_parent 匹配

这是我必须使用的方案... Wordpress 的;也不是说在第二季度会有关于我想展示哪些 child 的额外标准。例子。我将为 children 添加一个 post_meta .... meta_key = 'lang_i18N' meta_value='en' 所以我可以为 postmeta 添加一个连接到 q2

更新:

这是第 1 题:

[q1]


    SELECT
        posts.ID AS myItem_ID,
        posts.post_parent AS parentID,
        posts.post_title AS title,
        posts.post_content AS fullDesc,
        posts.post_excerpt AS shortDesc,
        posts.post_status AS status,
        posts.menu_order AS fetured_Order,
        json_meta.meta_value AS json_input,
        meta.meta_value AS vendorID,
        vendor.post_title AS vendorName,
        posts.post_modified AS modifiedDate
    FROM wp_posts AS posts
    LEFT JOIN wp_postmeta AS meta
        ON meta.post_id = posts.ID
    LEFT JOIN wp_postmeta AS json_meta
        ON json_meta.post_id = posts.ID
    LEFT JOIN wp_postmeta AS i18N
        ON i18N.post_id = posts.ID
    LEFT JOIN wp_posts AS vendor
        ON vendor.ID = meta.meta_value
    WHERE meta.meta_key = 'agency'
    AND json_meta.meta_key = 'json_input'
    AND posts.post_type = 'activity_item'
    AND posts.post_status = 'publish' 
    AND posts.ID IN (1080, 1231, 1273, 1882, 1937)
    LIMIT 0,2

好的,这给了我父列表...现在我想包括与 q1 相同的子项,但也许我想要 i18N = 'es'这意味着我想要 i18N 具有的任何值字段的 parent ,但我想要'es'的 child ,也许有 4 个 child ,好吧,我希望 LIMIT 只显示 2 个 parent ,以及他们有多少 child (不限制 child )这可以在一个查询中完成吗?我试图远离 PHP 只是因为它包含大量数据。

最佳答案

如果你想在 php 中使用递归函数来获取父行的所有嵌套子行,那么可以使用下面的函数:-

function get_categories_subcategories($id)
{
    $condition = isset($id)?"post_parent=".$id."":"post_parent=0";
    $sql="select id,post_parent,title,disruption from posts where ".$condition."";    

    $query=mysql_query($sql);

    $arr = array();

    if(mysql_num_rows($query))
    { 
        while($result=mysql_fetch_array($query))
        {   
         $arr[] = array(
         "id" => $result["id"],
         "post_parent" => $result["post_parent"],
         "title" => $result["title"],
         "disruption" => $result["disruption"],
         "child" => get_categories_subcategories($result["id"])
      );     
        }        
    }
    return $arr; 
}

关于mysql - 艰难的 mysql 嵌套表结果挑战,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11081157/

相关文章:

mysql - Spring Boot 数据源 : 'url' attribute is not specified

swift - Enumerations 的枚举和避免使用 Any 类型

java - HQL 可完美运行嵌套 SQL

list - Haskell中的嵌套 block ?

mysql - 如何在我的 CodeIgniter 模型中使用 ON DUPLICATE KEY UPDATE?

mysql - 在更新语句中设置变量值

php - Jquery 从数据库表自动建议

php - 数据库 ORM Doctrine Symfony 4

php - 组合 : avoiding multiple nested foreach

python - 在 Python 中创建具有嵌套属性的空对象