【问题标题】:combine two sql queries -结合两个 sql 查询 -
【发布时间】:2014-01-13 13:04:04
【问题描述】:

我有两个要合并的 sql 查询

第一个:

SELECT * FROM wp_posts
JOIN wp_postmeta on (post_id=ID)
WHERE  meta_key = "packageID" and  meta_value = 1 
ORDER BY post_date limit 50

将 wordpress wp_post 表加入 wp_postmeta 并获取所有与 packageID = 1 相遇的帖子(我认为这可能是一种不优雅的方式,但它确实有效)

第二个

SELECT * FROM wp_postmeta
JOIN wp_posts ON (meta_value=ID) 
WHERE post_id = 2110
AND meta_key = '_thumbnail_id'

再次将 wp_post 表连接到 wp_postmeta 表,因此对于 id 为 2110 的帖子,它成功获取了该帖子的缩略图。 NB 2110 只是一个 id 的示例

在 Wordpress 中,缩略图是一种帖子。所以在这个例子中,构成帖子 2110 的文本与帖子 2115 相关联 - 后者是缩略图

我想要做的是在第一个查询中获取列表,但也获取与每个帖子相关联的缩略图

我想我需要两个连接,但我不知道怎么做(作为一个 sql 初学者)

注意这将在 Wordpress 外部的脚本中,所以我不能使用 Wordpress 的内置函数

【问题讨论】:

    标签: mysql sql wordpress


    【解决方案1】:

    你可以试试这个,如果帖子有多个缩略图,你可以得到以逗号分隔的缩略图列表

    SELECT 
      *,
      (SELECT 
        GROUP_CONCAT(meta_value) 
      FROM
        wp_postmeta 
      WHERE post_id = wp.ID 
        AND wpm.meta_key = "_thumbnail_id") AS `thumbnails`
    FROM
      wp_posts wp 
      JOIN wp_postmeta wpm 
        ON (wpm.post_id = wp.ID) 
    WHERE wpm.meta_key = "packageID" 
      AND wpm.meta_value = 1 
    ORDER BY wp.post_date 
    LIMIT 50 
    

    注意:GROUP_CONCAT 对连接字符有限制,但您 可以增加这个限制

    要只获得一个缩略图,您可以试试这个

    SELECT 
      *,
      (SELECT 
        (meta_value) 
      FROM
        wp_postmeta 
      WHERE post_id = wp.ID 
        AND wpm.meta_key = "_thumbnail_id" LIMIT 1) 
    FROM
      wp_posts wp 
      JOIN wp_postmeta wpm 
        ON (wpm.post_id = wp.ID) 
    WHERE wpm.meta_key = "packageID" 
      AND wpm.meta_value = 1 
    ORDER BY wp.post_date 
    LIMIT 50 
    

    【讨论】:

      【解决方案2】:

      试试下面的代码

      SELECT * FROM wp_posts wp JOIN wp_postmeta wm  on (wp.post_id=wm.ID) WHERE  wp.meta_key = "packageID" and  wp.meta_value = 1 ORDER BY wp.post_date limit 50;
      

      使用正确的别名并尝试一下。

      【讨论】:

        【解决方案3】:

        尝试使用 post_type 列。附件的 post_type 为“附件”。如果需要,我可以进一步解释。

        缩略图附加到的帖子也将在 post_parent 列中。

        【讨论】:

          【解决方案4】:
          global $wpdb;
          
              $query7 = "SELECT distinct wp_postmeta.meta_value, wp_postmeta.meta_key, wp_posts.ID
                  FROM wp_posts INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
                  INNER JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id)
                  WHERE wp_posts.ID = wp_postmeta.post_id
                  AND wp_posts.post_status = 'publish'
                  AND wp_postmeta.meta_key = 'packageID'
                  AND wp_postmeta.meta_value = 1
                  AND (mt1.meta_key LIKE '_thumbnail_id')
              $output = $wpdb->get_results( $query7 );
          

          多次加入同一个表时,使用具有不同别名的联接。

          希望这会有所帮助。

          【讨论】:

            【解决方案5】:

            试试这个

            SELECT * FROM wp_posts P1
            LEFT JOIN wp_postmeta M1 ON (M1.post_id=P1.ID)
            WHERE  (M1.meta_key = "packageID" and  M1.meta_value = 1 )
            LEFT JOIN wp_postmeta M2 ON (M2.meta_key=P1.ID AND M2.meta_key = '_thumbnail_id') 
            LEFT JOIN wp_posts P2 ON (M2.meta_value=P2.ID)
            ORDER BY P1.post_date limit 50
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-05-14
              • 2021-07-02
              • 2016-10-27
              • 1970-01-01
              • 1970-01-01
              • 2012-11-14
              • 2016-09-28
              相关资源
              最近更新 更多