Esempio di SQL RAW per SELEZIONARE post con 2 o più tag

31 mar 2011, 18:41:55
Visualizzazioni: 2.36K
Voti: 0

Ho bisogno di un SQL RAW, poiché sto lavorando su una piattaforma diversa con il database di WordPress.

Quando eseguo example.com/tag/first+second, WordPress esegue una query SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (10649,7783,6336,4556,3938)

Da dove ha preso questi ID post? Sto solo supponendo. Ho alcune ipotesi al riguardo, ma prima vorrei vedere se qualcuno lo sa.

Ecco la query che ho costruito per ottenere post con un SINGOLO 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

grazie.

sql
4
Commenti

"Piattaforma diversa"; stai lavorando con il database di WordPress, però?

MikeSchinkel MikeSchinkel
31 mar 2011 19:02:58

@Mike Sì, direi database MYSQL. Dato che non sto utilizzando le classi di astrazione del database di WordPress

simple simple
31 mar 2011 19:07:19

Ma stai usando lo schema del database di WordPress, giusto?

MikeSchinkel MikeSchinkel
31 mar 2011 19:20:38

@Mike Sì, hai ragione sullo schema del database di WP

simple simple
2 apr 2011 01:36:38
Tutte le risposte alla domanda 1
4

Sembra che tu stia intercettando una query errata. Dumpando l'SQL per questo URL (tramite il filtro posts_request) ottengo questo:

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

In ogni caso, guarda il metodo WP_Query->get_posts(), che gestisce la trasformazione delle variabili di query in SQL. C'è molto codice lì e gran parte è stato modificato nella versione 3.1, quindi è un po' difficile per me identificare esattamente dove vengono gestiti i tag multipli.

31 mar 2011 20:54:14
Commenti

Sì hai ragione ho una domanda leggermente diversa, ma anche da quella che hai indicato, non riesco a usarla per la selezione multipla di "tag"

simple simple
2 apr 2011 01:37:42

@simple l'URL example.com/tag/first+second recupera quello che vuoi? Basta agganciarsi a posts_request e scaricare la query che genera, come ho fatto io. Hai bisogno di aiuto con questo?

Rarst Rarst
2 apr 2011 01:40:58

@Rast sì recupera, ma esegue una query simile a "SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (10649,7783,6336,4556,3938)", Ma quello che mi serve è ottenere quei post_id! Li controllo anche contro Soundex, quindi il caso diventa ancora più divertente! Hai qualche idea su come scaricare tutte le query che wordpress esegue per una singola Richiesta?

simple simple
2 apr 2011 09:34:57

@simple Quella query non è nemmeno una query per i post, è una query per i campi personalizzati. Non sono sicuro di cosa c'entri con quanto sopra - per favore prova a fare il dump del filtro posts_request se hai bisogno della query che viene eseguita per recuperare i post.

Rarst Rarst
2 apr 2011 14:04:21