繁体   English   中英

有没有更好的方法来在mysql和PHP中查询此

[英]Is there a better way to query this in mysql and PHP

我正在使用postmeta表为wordpress编写一些自定义代码。 这些项目存储在此处,并且公共pk1是post_id。

但是,我正在做的事将有一堆可点击的部分,例如

  • source_site
  • source_author
  • source_rating

或类似的东西。 现在,该表将为具有相同source_site或source_author的不同帖子保存多个帖子数据。

然后,用户可以单击source_author,它们将被带到一个新表中,该表包含链接到该source_author的所有帖子或文章。

问题是我链接到后元数值,而不是通过后id的pk1链接。

这意味着要获取其余数据,我将不得不执行其他查询或对同一张表进行联接。

这使我想到了我的问题。 进行联接或子查询会更好。

另一个问题是postmeta表存储所有各种数据以及键和值,因此很难查询我想要的其他部分。

所以桌子看起来像

   |meta_id|post_id|meta_key|meta_value|
   |1      | 2     |source_author | Dan Holmes |
   |2      | 2     |source_site   |http://somesite.com|

我只是想寻找最干净的方法来获取这些数据,否则我只能想到的是,首先使用以下方法为作者获取数据:

$the_post_ids = select post_id from postmeta where meta_key='source_author' and meta_value='Dan Holmes'

foreach($the_post_ids as $post_id) {
   select * from postmeta where post_id=$post_id;
}

现在这都是伪代码,我想问题是一旦数据开始变得相当大,我担心这将导致每个部分都可以点击的大量开销,并且事实上在一个数组中进行多个选择。

有没有更好的方法来解决这个问题?

正如您所提到的,随着数据库的增长,性能成为一个问题,因此,您希望将数据库的往返次数限制为尽可能少。 我会像以下查询一样拉回给定作者的所有元表行:

SELECT * FROM postmeta WHERE post_id IN
    (SELECT post_id FROM postmeta
        WHERE meta_key='source_author' AND meta_value='Dan Holmes'
    )

然后在PHP中编写类似于您所拥有的foreach循环来处理结果。

编辑

这是一个不同的选项,不使用IN子句

SELECT meta1.* FROM postmeta meta1
    INNER JOIN 
        (SELECT DISTINCT postid FROM postmeta
             WHERE postmeta.meta_key = 'source_author' AND postmeta.meta_value = 'Dan Holmes'
        ) meta2 
    ON meta1.post_id = meta2.post_id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM