gpt4 book ai didi

MySQL用序列化数据连接两个表,递归?

转载 作者:行者123 更新时间:2023-11-29 14:28:26 27 4
gpt4 key购买 nike

我在尝试获取 SQL 查询所需的所有数据时遇到一些重大问题。我对查询还很陌生,所以我会尽力尽可能地描述这一点。

我正在尝试使用 Wordpress 插件 NextGen Gallery 进行交叉查询。基本上有两个表 nggalbumnggallery。我试图做的是创建所有专辑和画廊的嵌套列表。

nggalbum中的数据包含列idnameslugpreviewpicalbumdescsortorderpageid。我感兴趣的唯一值是 idnameslugsortordersortorder 的值是序列化数据,其中包含此条目与所有其他相册和图库条目的关系数据。例如: a:2:{i:0;s:2:"a2";i:1;s:2:"a6";} 这基本上意味着当前查询项有两个子项-专辑(其对应的 ID 以“a”为前缀):a2a6。如果它有画廊,则该编号没有 a 前缀,而是 ngggallery gid(稍后会介绍)。

我用它来获取 nggalbum 表中的所有数据:

    $albums = $wpdb->get_results("SELECT * FROM $wpdb->nggalbum" , OBJECT_K );

foreach ($albums as $key => $value) {
$albums[$key]->id = 'a' . $key;
$albums[$key]->galleries = empty ($albums[$key]->sortorder) ? array() : (array) unserialize($albums[$key]->sortorder) ;
$albums[$key]->name = stripslashes( $albums[$key]->name );
$albums[$key]->albumdesc = stripslashes( $albums[$key]->albumdesc );
}

示例数据:

Array
(
[1] => stdClass Object
(
[id] => a1
[name] => Image Gallery
[slug] => image-gallery
[previewpic] => 0
[albumdesc] =>
[sortorder] => a:2:{i:0;s:2:"a2";i:1;s:2:"a6";}
[pageid] => 0
[galleries] => Array
(
[0] => a2
[1] => a6
)

)

[2] => stdClass Object
(
[id] => a2
[name] => ALBUM 1 - High res
[slug] => album-1-high-res
[previewpic] => 0
[albumdesc] =>
[sortorder] => a:2:{i:0;s:1:"2";i:1;s:1:"3";}
[pageid] => 0
[galleries] => Array
(
[0] => 2
[1] => 3
)

)

我为所有这些 ID 添加了一个 a 前缀,因为它们是专辑,而且我认为这可能会在以后有所帮助。由于我不确定自己在做什么,因此情况可能并非如此。

nggallery 包含列 gidnameslugpath标题galdescpageidpreviewpic作者。唯一相关的列是 gidnameslugpathtitle .

我用它来获取 nggallery 表中的所有数据:

$galleries = $wpdb->get_results( "SELECT SQL_CALC_FOUND_ROWS * FROM $wpdb->nggallery", OBJECT_K );

foreach ($galleries as $key => $value) {
$galleriesID[] = $key;
$galleries[$key]->counter = 0;
$galleries[$key]->title = stripslashes($galleries[$key]->title);
$galleries[$key]->galdesc = stripslashes($galleries[$key]->galdesc);
$galleries[$key]->abspath = WINABSPATH . $galleries[$key]->path;
}

示例数据:

Array
(
[2] => stdClass Object
(
[gid] => 2
[name] => new_collection
[slug] => new-collection
[path] => wp-content/gallery/new_collection
[title] => NEW COLLECTION
[galdesc] =>
[pageid] => 0
[previewpic] => 8
[author] => 1
[counter] => 0
[abspath] => /Applications/MAMP/htdocs/igal/wp-content/gallery/new_collection
)

[3] => stdClass Object
(
[gid] => 3
[name] => cha-collection
[slug] => cha-collection
[path] => wp-content/gallery/cha-collection
[title] => CHA COLLECTION
[galdesc] =>
[pageid] => 0
[previewpic] => 15
[author] => 1
[counter] => 0
[abspath] => /Applications/MAMP/htdocs/igal/wp-content/gallery/cha-collection
)

现在这就是我陷入困境的地方。我真的很希望能够编写一些代码来解析每个专辑的 gallery 数组,并将其与 nggallery 中相应的专辑和/或画廊相关联。

最终我希望获得专辑/画廊的嵌套列表,例如:

(a1) [link] Title
(a2) [link] Title
1 [link] Title
2 [link] Title
3 [link] Title
(a3) [link] Title
1 [link] Title

[...]

我不完全确定如何开始做这件事。我尝试通过一些 foreach 语句循环一些东西,但基本上不成功。我会在谷歌上搜索这个,但我不知道这个技术叫什么。

真的很想了解如何做这样的事情,所以如果您能阐明这种技术,我将不胜感激。类似教程或基本概念的链接对我来说非常有益。我不希望任何人为我完成所有代码,但任何朝着正确方向迈出的步骤都会受到极大的赞赏(如果您想通过一些步骤来完成代码,我当然不会争论;))。

提前非常感谢!

最佳答案

我不太明白相册和画廊如何相互关联以及您想要在嵌套列表中看到什么。然而,在我看来问题出在“sortorder”列中,它做得太多了。我怀疑您正在尝试表达表之间的多对多关系,在这种情况下,使用一个单独的表来表达该关系可能会更清晰。完成此操作后,我认为您可以更轻松地查询哪些专辑和 ngalleries 与画廊相关。这有多大帮助吗?

编辑:

好的,我想我现在明白了。您正在尝试创建相册的层次结构,并且想要打印相册的整个层次结构,包括每个相册拥有的所有画廊。因此,使用您现有的设计,我认为您可以这样做:

PrintGallery( string galleryID ) 
{
//1 do a query that selects the gallery using the id (use a where clause)

//2 print gallery details like the name etc whatever you want to
}

PrintAlbum ( string albumID )
{
//1 do a query that selects the Album using the id (use a where clause)
//2 print Album details (name icon etc) but not the gallery array details.

if(galleries array length > 0 )
/* in case there are no galleries we don't want a hanging <li> with nothing in it */
echo "<ul>" /* This will ensure the items are nested properly */
foreach item currentItemID in galleries array
echo "<li>"
if (currentItemID is an Album)
PrintAlbum(currentItemID) /* recurse */
else /* assume it's a gallery are in the array */
PrintGallery(currentItemID)
echo "</ul>" /* end this level */

}

关于MySQL用序列化数据连接两个表,递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10491675/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com