2013-03-02 40 views
5

Tôi đang sử dụng WP Data Tables để tạo bảng từ SQL DB. Trong wordpress phụ trợ mã ví dụ để sử dụng trông như thế này:Truy vấn SQL cho Loại bài đăng tùy chỉnh và Nhiều trường tùy chỉnh

SELECT post_id, post_date 
FROM wp_posts 
WHERE post_type = 'custom_post_type' 
AND post_status = 'publish' 

Im cố gắng để có được giá trị trường tùy chỉnh từ bài meta. Dưới đây là những gì tôi có cho đến nay ...

SELECT post_id, post_date 
FROM wp_posts 
WHERE post_type = 'custom_post_type' 
AND post_status = 'publish' 
AND SELECT custom_field_key_1, custom_field_key_2, custom_field_key_3 
FROM wp_postmeta 
WHERE post_id = post_id 

UPDATE:

tôi thấy rằng p.ID là cần thiết thay vì post_id và rằng tôi cần tìm kiếm các meta_key. Một cái gì đó giống như ...

SELECT p.post_title, 
     p.post_date, 
     pm.meta_key = 'custom_field_key' 
FROM wp_posts p 
INNER JOIN wp_postmeta pm 
ON p.ID = pm.post_id 
WHERE p.post_type = 'custom_post_type' 
AND p.post_status = 'publish' 
+0

Tôi tin rằng bạn cần 'JOIN' ở đây. –

Trả lời

0

Giả sử rằng SQL chuẩn được hỗ trợ, bạn sẽ cần một cái gì đó như thế này (chưa được kiểm tra):

SELECT w.post_id, w.post_date, m.custom_field_key_1, m.custom_field_key_2, m.custom_field_key_3 
FROM wp_posts w, wp_postmeta m 
WHERE post_type = 'custom_post_type' AND post_status = 'publish' 
AND w.post.id = m.post.id 
4

Sử dụng một INNER JOIN:

SELECT p.post_id, 
     p.post_date, 
     pm.custom_field_key_1, 
     pm.custom_field_key_2, 
     pm.custom_field_key_3 
FROM wp_posts p 
    INNER JOIN wp_postmeta pm 
     ON p.post_id = pm.post_id 
WHERE p.post_type = 'custom_post_type' 
    AND p.post_status = 'publish' 
+0

Loại tác phẩm này và tôi đã cập nhật. – user2106176

+0

@ user2106176 - vui vì điều này đã giúp ích. Nhìn vào bản cập nhật của bạn, tôi nghĩ bạn cần di chuyển "pm.meta_key = 'custom_field_key'" vào mệnh đề WHERE của bạn. Bạn không thể đặt giá trị trường trong câu lệnh SELECT. May mắn nhất! – sgeddes

+0

Thay đổi p.post_id thành p.ID làm việc cho tôi. –

0

Bạn có thể thử này .

SELECT p.post_id, p.post_date, 
    pm.custom_field_key_1, pm.custom_field_key_2, pm.custom_field_key_3 
FROM wp_posts p 
JOIN wp_postmeta pm ON p.post_id = pm.post_id 
WHERE p.post_type = 'custom_post_type' 
AND p.post_status = 'publish' 
0

Ok ngay cả khi bạn đã cập nhật câu trả lời. Tôi lấy ví dụ của bạn và tôi đã làm việc này ra:

SELECT p.ID, 
     p.post_title, 
     pm.meta_value as 'value1', 
     pma.meta_value as 'value2' 

FROM wp_posts p 
     INNER JOIN wp_postmeta AS pm ON pm.post_id = p.ID 
     INNER JOIN wp_postmeta AS pma ON pma.post_id = p.ID 

WHERE 
     pma.meta_key = 'custom_field_key_1' AND 
     pm.meta_key = 'custom_field_key_2' AND 

     p.post_type = 'your_post_type' AND 
     p.post_status = 'publish' 

Vì vậy, ở đây tôi đang sử dụng bí danh AS cho các giá trị lưu trữ trong cùng một bảng, INNER JOIN cho wp_postmetapost_id và đó là tất cả.

Tài liệu tham khảo: Multiple Inner join same table

Bằng cách này bạn sẽ nhận được một mảng bằng bài đăng và các trường tùy chọn của bạn:

array(1) { 
    [0]=> object(stdClass)#341 (4) { 
      ["ID"]=> string(1) "1123" 
      ["post_title"]=> string(15) "Your post title" 
      ["custom_field_key_1"]=> string(12) "Your value 1 " 
      ["custom_field_key_2"]=> string(29) "Your value 2" 
} 

Bạn có thể thêm bao nhiêu bí danh và meta_key như bạn cần. Hy vọng điều này giúp đỡ!

Các vấn đề liên quan