Poate cineva să ofere un exemplu de SQL brut pentru SELECTAREA postărilor după 2 sau mai multe taguri

31 mar. 2011, 18:41:55
Vizualizări: 2.36K
Voturi: 0

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.

sql
4
Comentarii

"Platform diferit"; totuși lucrezi cu baza de date WordPress?

MikeSchinkel MikeSchinkel
31 mar. 2011 19:02:58

@Mike Da, aș spune că este baza de date MYSQL. Deoarece nu folosesc clasele de abstractizare a bazei de date din WordPress

simple simple
31 mar. 2011 19:07:19

Dar folosești schema bazei de date WordPress, corect?

MikeSchinkel MikeSchinkel
31 mar. 2011 19:20:38

@Mike Da, ai dreptate schema bazei de date Wp

simple simple
2 apr. 2011 01:36:38
Toate răspunsurile la întrebare 1
4

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.

31 mar. 2011 20:54:14
Comentarii

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 simple
2 apr. 2011 01:37:42

@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?

Rarst Rarst
2 apr. 2011 01:40:58

@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 simple
2 apr. 2011 09:34:57

@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.

Rarst Rarst
2 apr. 2011 14:04:21