我正在使用其他人的WP插件,该插件在wp_postmeta
使用“人造钥匙”。所以我们有效地劫持了wp_postmeta
创建嵌套关系数据库。所以一排会有
meta_id = 999
post_id = 130
meta_key = \'event_id\'
meta_value = \'19\'
然后,共享该post\\U id的其他4个实际wp\\U POSTETA行包含该虚拟“行”数据的其余信息。例如
meta_id = 989
post_id = 130
meta_key = \'Name\'
meta_value = \'Fred\'
我们将有很多“虚拟行”(数百行),它们都共享
event_id
19个(当然还有很多其他不同的
event_id
他们自己的。
我尝试了许多SQL查询,但我还是被难住了。如何获取具有公共event\\u id分组信息的表?它不必包含所有数据,只需包含一部分,例如“Name”字段。我尝试了如下子查询:
SELECT meta_value from wp_postmeta
WHERE meta_key=\'name\' AND
post_id IN
(SELECT post_id FROM wp_postmeta
WHERE meta_key=\'event_id\' AND meta_value=\'19\');
这可能看起来愚蠢得可笑——它也不起作用。我也试着加入。这似乎是在WP编码中经常出现的东西,但我已经搜索过了,结果几乎是空的。
SO网友:gmazzap
如果我正确理解您的问题,这应该可以:
function get_event_info($event_id = 0, $info = \'\' ) {
global $wpdb;
return $wpdb->get_col(
$wpdb->prepare(
"SELECT meta_value from $wpdb->postmeta WHERE
meta_key = \'%s\' AND post_id IN
(SELECT DISTINCT post_id FROM $wpdb->postmeta WHERE meta_key = \'event_id\' AND meta_value= %s )",
$info, $event_id
)
);
}
这样使用:
$names = get_event_info( 19 , \'Name\' );
if ( ! empty($names) ) {
echo \'<ul>\';
foreach ($names as $name) {
echo \'<li>\' . $name . \'</li>\';
}
echo \'</ul>\';
}
请确保第二个参数与
meta_key
: 在您的示例中
meta_key = \'Name\'
但是SQL查询是
WHERE meta_key=\'name\'
, 情况不同!