自定义SELECT按元键查询两个表

时间:2015-08-07 作者:wpdm

我正在使用一个事件插件wp_ftcalendar_events 数据库中的表start_datetime 柱这是整张桌子的图像:

enter image description here

我想通过以下方式查询我的帖子start_datetime. 我知道我不能用常规查询做到这一点。我也知道这个查询需要一些条件等。但首先,我想做一个简单的工作查询,稍后再添加条件。在codex中,我发现这个示例结合了两个表:

<?php
global $wpdb;
 $querystr = "
    SELECT * 
    FROM $wpdb->posts, $wpdb->postmeta
    WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id 
    AND $wpdb->posts.post_status = \'publish\' 
    AND $wpdb->posts.post_type = \'post\'
    ORDER BY $wpdb->posts.post_date DESC
 ";
 $pageposts = $wpdb->get_results($querystr, OBJECT_K); ?>
 <?php if ($pageposts): ?>

  <?php global $post; ?>
  <?php foreach ($pageposts as $post): ?>   
      <?php setup_postdata($post); ?>
      <?php the_title(); ?><br>
  <?php endforeach; ?>

 <?php endif; ?>
我删除了一些元键条件以使其更简单,但它仍在工作。然后我改变了postmeta 表格收件人ftcalendar_events 桌子我还更改了WHERE语句,因为我认为这两个表中的共同点是—post_parent 柱我仍然无法让它工作-它没有显示任何东西。以下是全部代码:

<?php
global $wpdb;
 $querystr = "
    SELECT * 
    FROM $wpdb->posts, $wpdb->ftcalendar_events
    WHERE $wpdb->posts.post_parent = $wpdb->ftcalendar_events.post_parent
    AND $wpdb->posts.post_status = \'publish\' 
    AND $wpdb->posts.post_type = \'post\'
    ORDER BY $wpdb->posts.post_date DESC
 ";
 $pageposts = $wpdb->get_results($querystr, OBJECT_K); ?>
 <?php if ($pageposts): ?>

  <?php global $post; ?>
  <?php foreach ($pageposts as $post): ?>
      <?php setup_postdata($post); ?>
      <?php the_title(); ?><br>
  <?php endforeach; ?>

 <?php endif; ?>
我不是一个程序员,我想我自己也不能把它推得更远。

phpmyadmin查询截图

enter image description here

工作代码如下所示:

<?php
global $wpdb;
 $querystr = "
SELECT * 
FROM wp_posts
JOIN wp_ftcalendar_events ON wp_posts.ID = wp_ftcalendar_events.post_parent
WHERE wp_posts.post_status =  \'publish\'
AND wp_posts.post_type =  \'post\'
ORDER BY wp_posts.post_date DESC 
 ";
 $pageposts = $wpdb->get_results($querystr, OBJECT_K); ?>
 <?php if ($pageposts): ?>

  <?php global $post; ?>
  <?php foreach ($pageposts as $post): ?>
      <?php setup_postdata($post); ?>
      <?php the_title(); ?><br>
  <?php endforeach; ?>

 <?php endif; ?>
一些结果被复制了,所以我从OBJECT改为OBJECT\\u K。现在我要处理条件。

1 个回复
最合适的回答,由SO网友:Jurij Jazdanov 整理而成

首先,您试图通过post\\u parent组合这两个表。

$wpdb->posts.post_parent = $wpdb->ftcalendar_events.post_parent
我猜ftcalendar\\u events中的数据有posts表的子项,请尝试

$wpdb->posts.ID = $wpdb->ftcalendar_events.post_parent
您还可以尝试连接表:

SELECT * FROM $wpdb->posts JOIN $wpdb->ftcalendar_events
ON $wpdb->posts.ID = $wpdb->ftcalendar_events.post_parent
WHERE $wpdb->posts.post_status = \'publish\' AND $wpdb->posts.post_type = \'post\'
ORDER BY $wpdb->posts.post_date DESC

结束

相关推荐

Query Posts by Custom Field

我希望通过我在页面上创建的自定义字段查询我的帖子。但自定义字段是一个值数组。所以自定义字段“country”可以如下所示country => usa,africa,united kingdom,poland 让我困惑的是如何使用自定义字段来查询帖子,该字段是一个用分隔的数组\',\'?我在这里尝试了很多解决方案,但都没有成功。如有任何建议,将不胜感激!