Poate cineva să ofere un exemplu de SQL brut pentru SELECTAREA postărilor după 2 sau mai multe taguri
Am nevoie de un SQL brut, deoarece lucrez de pe o altă platformă cu baza de date WordPress.
Când rulez example.com/tag/first+second
, WordPress execută o interogare SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (10649,7783,6336,4556,3938)
De unde a obținut aceste ID-uri de postări? Doar presupun. Am câteva idei despre asta, dar mai întâi vreau să văd dacă știe cineva.
Iată interogarea pe care am construit-o pentru obținerea postărilor după UN SINGUR tag:
SELECT `wp_posts`.`ID`, `wp_posts`.`post_name`, `wp_posts`.`post_title`, `wp_posts`.`post_date`, `wp_posts`.`post_content` , DATEDIFF(CURDATE(),post_date) as days_ago
FROM `wp_posts`
INNER JOIN wp_term_relationships
ON (wp_posts.ID = wp_term_relationships.object_id)
INNER JOIN wp_term_taxonomy
ON (wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id)
INNER JOIN wp_terms
ON (wp_term_taxonomy.term_id = wp_terms.term_id)
WHERE 1=1
AND wp_term_taxonomy.taxonomy = 'post_tag'
AND wp_terms.slug SOUNDS LIKE 'Hennessy'
AND wp_terms.slug SOUNDS LIKE 'VS'
AND wp_posts.post_type = 'post'
AND (wp_posts.post_status = 'publish')
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC
mulțumesc.

Se pare că interogarea nu este corectă. Afișând SQL-ul pentru această adresă URL (prin filtrul posts_request
) am obținut următoarele:
SELECT SQL_CALC_FOUND_ROWS wp_posts.*
FROM wp_posts
INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
INNER JOIN wp_term_relationships AS tt1 ON (wp_posts.ID = tt1.object_id)
WHERE 1=1
AND ( wp_term_relationships.term_taxonomy_id IN (93) AND tt1.term_taxonomy_id IN (94) AND wp_posts.ID IN (
SELECT object_id
FROM wp_term_relationships
WHERE term_taxonomy_id IN (93,94)
GROUP BY object_id HAVING COUNT(object_id) = 2
) )
AND wp_posts.post_type = 'post'
AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')
GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 10
În orice caz, consultați metoda WP_Query->get_posts()
, care se ocupă de transformarea variabilelor de interogare în SQL. Există mult cod acolo și o mare parte a fost modificată în versiunea 3.1, așa că este puțin dificil pentru mine să identific exact unde sunt gestionate etichetele multiple.

Da, ai dreptate, am o interogare ușor diferită, dar chiar și din cea pe care ai indicat-o, nu reușesc să o folosesc pentru selectarea multiplă a "tag"-urilor

@simple URL-ul example.com/tag/first+second
îți aduce ceea ce dorești? Doar conectează-te la posts_request
și afișează interogarea pe care o generează, așa cum am făcut eu. Ai nevoie de ajutor cu asta?

@Rast funcționează, dar rulează o interogare similară cu "SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (10649,7783,6336,4556,3938)"
, Dar ceea ce am nevoie este să obțin acele post_id-uri! De asemenea, le verific împotriva Soundex, așa că situația devine puțin mai complicată! Ai vreo idee despre cum să afișez toate interogările pe care WordPress le execută pe o singură cerere?

@simple Acea interogare nu este nici măcar o interogare pentru postări, este o interogare pentru câmpuri personalizate. Nu sunt sigur ce legătură are cu ceva, așa cum am menționat mai sus - te rog să încerci să afișezi filtrul posts_request
dacă ai nevoie de interogarea care este executată pentru a prelua postările.
