我正在搞乱wordpress为我的插件制作一个jquery用来填充表格的API。需要帮助弄清楚我将如何做到这一点。
首先查询,这将获得'父'帖子:
[Q1]:
Select * from posts as p where p.ID IN ({SomeIDs I am requesting})
第二个查询,这将获得第一个孩子:
[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没有孩子,我仍然希望它显示在结果中。
所以我尝试加入,我会丢失没有ID = post_parentID的记录,除非我可以做其他类型的连接......
q1上的想法是'LIMIT',组合结果用q2排序,然后在制作表时jQuerys forloop的结果只会改变<TR>
的bg,如果ID和post_parent匹配的话
这是我必须使用的方案...... Wordpress的;也不是说在q2中我会想要展示哪些孩子的额外标准。例。我将为孩子们添加一个post_meta .... meta_key ='lang_i18N'meta_value ='en'所以我可以为q2添加一个连接到postmeta
更新:
这是q1:
[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的任何值字段,但是我想要那些'es'的孩子,也许有4个孩子,我希望LIMIT只显示2个父母,然而他们有多少孩子(不限制孩子)可以在一个查询中完成吗?我试图远离PHP只是因为它有很多数据。
答案 0 :(得分:1)
如果你想在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;
}
答案 1 :(得分:0)
试试这个::
Select
id,
if_null(post_parent_id,0)
from posts as p
left join
(Select parent_id from posts where id= ?/*input*/) as parent_temp_table
on (parent_temp_table.parent_id = p.postID)