簡體   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