Wordpress SQL - gönderi kategorisi ve etiketleri
Bu sorguyu, kategorisi ve etiketleri ile gönderileri almak için kullandım.
SELECT
p.id,
p.post_name,
c.name,
GROUP_CONCAT(t.`name`)
FROM wp_posts p
JOIN wp_term_relationships cr
on (p.`id`=cr.`object_id`)
JOIN wp_term_taxonomy ct
on (ct.`term_taxonomy_id`=cr.`term_taxonomy_id`
and ct.`taxonomy`='category')
JOIN wp_terms c on
(ct.`term_id`=c.`term_id`)
JOIN wp_term_relationships tr
on (p.`id`=tr.`object_id`)
JOIN wp_term_taxonomy tt
on (tt.`term_taxonomy_id`=tr.`term_taxonomy_id`
and tt.`taxonomy`='post_tag')
JOIN wp_terms t
on (tt.`term_id`=t.`term_id`)
GROUP BY p.id
Bu dan Wordpress SQL: get sonrası kategori ve etiketleri
Ama bir sorunum var, sorgu etiketleri olmayan gönderileri yok sayıyor . Diğer birçok sorgu denedim ama BAŞARILI yok. Biri bana yardım edebilir mi?
Yanıtlar
Sorununuza iyi bir çözüme çok yakınsınız.
Başka bir cevaplayıcı bundan bahsetti: Kullan LEFT JOIN. Neden? Sıradan iç JOIN, ikinci tablodaki satırlarla eşleşmeyen ilk tablodaki satırları bastırır.
Kodunuz ayrıca MySQL'in kötü şöhretli GROUP BY uzantısını kötüye kullandığına dair işaretler de gösteriyor . Eğer öyle diyorsan
SELECT id, name, value
FROM tbl
GROUP BY id, name
aslında diyorsun
SELECT id, name, ANY_VALUE(value)
FROM tbl
GROUP BY id, name
Başka bir deyişle, sunucu valuegrup içinden istediğini seçer . Sen gibi öngörülebilir agrega sonucu kullanmalıdır MAX(value)veya GROUP_CONCAT(value). MySQL Sürüm 8 ve SQL tablo sunucusunun diğer marka ve modelleri kullandığınız sözdizimini reddeder.
Akıl sağlığınız için profesyonel ipucu , SQL'de ayrılmış kelimeler olmadıkça, tablo veya sütun adlarının etrafındaki ters işaretleri kullanmayın. Ve Pro ipucu , tablo veya sütun adları için ayrılmış sözcükler kullanmayın.
Bunun yerine bu sorguyu kullanın.
SELECT
p.id,
p.post_name,
GROUP_CONCAT(c.name ORDER BY c.name) categories,
GROUP_CONCAT(t.name ORDER BY t.name) tags
FROM wp_posts p
LEFT JOIN wp_term_relationships cr
on (p.id=cr.object_id)
LEFT JOIN wp_term_taxonomy ct
on (ct.term_taxonomy_id=cr.term_taxonomy_id
and ct.taxonomy='category')
LEFT JOIN wp_terms c on
(ct.term_id=c.term_id)
LEFT JOIN wp_term_relationships tr
on (p.id=tr.object_id)
LEFT JOIN wp_term_taxonomy tt
on (tt.term_taxonomy_id=tr.term_taxonomy_id
and tt.taxonomy='post_tag')
LEFT JOIN wp_terms t
on (tt.term_id=t.term_id)
GROUP BY p.id, p.post_name
Tüm birleşimleriniz iç birleşimlerdir, bu nedenle tablodan herhangi birindeki veriler eşleşmiyorsa, bu veriler alınmayacaktır.
İç birleşimlerinizi sol / sağ dış birleşimler olarak değiştirin.