复杂的SQL查询,涉及三个表和变量表名

时间:2009-08-27 08:28:05

标签: php mysql wordpress left-join

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

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_valueoption_name 'blog_name'的同一个表上选择option_name='state' option_value="$_POST['state']',并从{{列表中创建表名称1}}(来自表blog_id),并在末尾附加'_options'。

上帝我甚至不知道我试图做什么可以用人的嘴说。

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

如果我能为你澄清任何事情,请告诉我,我会尝试。

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

3 个答案:

答案 0 :(得分: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-service来调用它,或者实现一个memcache解决方案,这样如果这成为一个问题就可以集中存储和管理这些数据,但我想如果你使用这个对象在这里用前面的WP Super Cache缓存你应该没问题。

答案 1 :(得分:0)

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

为什么没有类似

的内容,而不是使用表名_options
blog_options

其中包含字段

  • blog_id
  • option_id
  • OPTION_NAME
  • 请将option_value

然后你可以基于blog_id

开心地JOIN

答案 2 :(得分:0)

如果我认为这是正确的,那么您正在创建具有变量名称的表。

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

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

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

相关问题