【问题标题】:Complex SQL query, involving three tables and variable table names复杂的SQL查询,涉及三张表和变量表名
【发布时间】:2009-08-27 08:28:04
【问题描述】:

我有两个不同的表需要从中提取数据

blogs

有以下列

blog_id

还有另一个有变量名的表,比如

$blog_id . "_options

其中包含以下列:

option_id, option_name, option_value

例如:

option_id = 1, option_name='state', option_value='Texas'
option_id = 2, option_name='blog_name', option_value='My Blog'

最后,我得到了以下 POST 数据

state

这是我需要做的:获取 POST 数据区域中的任何博客的名称。更简洁地说,我需要在option_name='state' 和option_value="$_POST['state']' 的同一张表上选择option_name 'blog_name' 的option_value,并且表名是从blog_id 的列表中创建的(从表@ 987654332@) 末尾附加了“_options”。

天哪,我什至不知道我要做什么可以用人的嘴说出来。

无论如何,我认为 stackoverflow 是询问的地方,如果在任何地方。

如果我能为你澄清任何事情,请告诉我,我会尽力的。

顺便说一下,这是因为我使用的是 Wordpress MU,并且选择在各种博客的动态创建的表格中添加一些额外的设置。

【问题讨论】:

    标签: php mysql wordpress left-join


    【解决方案1】:

    您可以在直接 SQL 中执行此操作,但我认为您最好使用内置的 wordpress 函数,以便如果数据库结构发生变化(这可能是因为 MU 和常规 WP 内核设置为很快合并) 你还可以。

    听起来您希望能够从活动博客中提取有关其他博客的信息。我会分两步完成:

    $blogs = get_blog_list(0,'all');
    foreach($blogs as &$blog) {
        switch_to_blog($blog['id']);
        $blog['state'] = get_option('state');
        restore_current_blog();
    }
    restore_current_blog();
    

    这将为您提供 MU 安装上所有活动博客的详细信息列表以及选项表中的状态字段。

    是的,它不那么优雅,但它的功能性和杂乱无章。如果您需要在页面加载中多次使用此信息,请使用 WP 的对象缓存来存储变量以供以后使用。还有很多方法可以通过 ajax 或来自父博客的 web 服务调用它,或者实现 memcache 解决方案,以便在出现问题时可以集中存储和管理这些数据,但我认为如果你使用该对象在这里用前端的 WP Super Cache 之类的东西缓存你应该没问题。

    【讨论】:

    • 除非我弄错了,否则您对$blog['state'] = get_option('state'); 的分配在每次迭代后都会被丢弃。我确信我可以写类似$blog_state[] = get_option('state') 的东西,但我喜欢将数据插入到我已经拥有的博客数组中的想法,而不是让两个数组彼此之间有微弱的链接
    • 或者我可以做类似 `foreach($blogs as $key => $blog) { switch_to_blog($blog['id']); $blogs[$key]['state'] = get_option('state'); restore_current_blog(); } restore_current_blog(); // 我其实不知道为什么最后一个 restore_current_blog() 在这里
    • 是的,我的错。如果你使用的是 PHP 5,你也可以这样做: foreach($blogs as &$blog) { 这样每次迭代 $blog 是对数组中原始项目的引用。
    【解决方案2】:

    我不认为你这样做是正确的。

    不要使用表名_options,为什么不使用类似的东西

    blog_options
    

    其中包含字段

    • blog_id
    • option_id
    • 选项名称
    • option_value

    那你就可以根据blog_id愉快地JOIN了

    【讨论】:

    • 好吧,无论对错,这是 Wordpress MU 建议您在博客的选项表中保存有关各个博客的信息的方式。
    • 那我可能得跟jdub说一句话了
    【解决方案3】:

    如果我没看错,那么您正在创建带有变量名的表。

    我认为这不是一个好主意。

    为什么不只创建一个表,其中包含一个变量字段,其中包含 varchar 类型的变量名称?该字段可以包含 $blog_id。

    就像您问题的其他答案一样。

    【讨论】:

    • 我正在创建带有变量名的表格,因为 Wordpress MU 上的每个博客都有自己的表格。再一次,无论对错,这就是 Wordpress MU 所说的要做的事情。
    猜你喜欢
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多