2015-07-04 27 views
10

Devo selezionare tutti i messaggi (primi messaggi e risposte) pubblicati in una serie di categorie specifiche (forum) in Drupal.Drupal: MySQL SELEZIONA tutti i messaggi appartenenti a un forum specifico

I primi messaggi vengono memorizzati in field_data_body, le risposte vengono archiviate in field_data_comment_body.

La struttura del field_data_body e field_data_comment_body è lo stesso, nella colonna body_value c'è il contenuto dei messaggi e nella colonna entity_id loro ID univoco.

La tabella contiene la colonna field_data_taxonomy_forumsentity_id e la colonna taxonomy_forums_tid (che sono gli ID delle categorie del forum). La tabella contiene le colonne taxonomy_term_datatid (che è lo stesso del taxonomy_forums_tid e la colonna description (che è il titolo della categoria forum).

Quindi, sto cercando una query che mi permette di selezionare il corpo di i messaggi (sia primi messaggi e risposte) e la descrizione del forum che specifica una serie di tid s (vale a dire gli ID delle categorie del forum), che troverò manualmente nella tabella taxonomy_term_data.

Così, per esempio Sto cercando la query che mi permette di SELEZIONARE i post "appartenenti" a tid s 1456,7622,862 e la relativa descrizione tid .

Ecco uno screenshot della tabella field_data_body: enter image description here

risposta

4

credo, sarebbe meglio per noi di dividere in 2 sottocompiti il ​​compito:

  1. trovare i corpi dei posti, appartenente ad una particolare TID.
  2. Trova tutti i commenti del corpo, appartenenti a un particolare tid.

Avremo bisogno di utilizzare queste tabelle:

  1. field_data_taxonomy_forums
  2. field_data_body
  3. commento
  4. field_data_comment_body

Struttura del database:

Database structure

Trovare i corpi

SELECT 
    taxonomy_forums.taxonomy_forums_tid AS tid, 
    body.entity_id, 
    body.body_value AS body 
FROM 
    field_data_taxonomy_forums AS taxonomy_forums 
INNER JOIN 
    field_data_body AS body 
ON 
    body.entity_id=taxonomy_forums.entity_id 
WHERE 
    taxonomy_forums.taxonomy_forums_tid IN (9); 

Trovare i commenti per i corpi

Qui avremo bisogno tavolo commenti, che unisce field_data_body e field_data_comment_body.

SELECT 
    taxonomy_forums.taxonomy_forums_tid AS tid, 
    comment_body.entity_id, 
    comment_body.comment_body_value AS body 
FROM 
    field_data_taxonomy_forums AS taxonomy_forums 
INNER JOIN 
    field_data_body AS body 
ON 
    body.entity_id=taxonomy_forums.entity_id 
INNER JOIN 
    comment 
ON 
    comment.nid=body.entity_id 
INNER JOIN 
    field_data_comment_body AS comment_body 
ON 
    comment_body.entity_id=comment.cid 
WHERE 
    taxonomy_forums.taxonomy_forums_tid IN (9); 

Se unisci queste 2 query, riceverai l'elenco di post e commenti.

sqlfiddle

+0

Perfetto. Premio di taglie in 12 ore. :-) – MultiformeIngegno

1

Per trovare riferimento a id forum è necessario aggiungere l'uso della tabella "Forum" (tabella di stabilire rapporti di nodi a patti forum.) Inoltre si deve ricordare quell'id del forum non esiste, è un id della tassonomia. Ecco un esempio di ottenere solo il primo argomento messaggio tassonomia ID (TID)

SELECT * FROM field_data_body fdb 
LEFT JOIN forum f ON f.nid = fdb.entity_id 
WHERE fdb.bundle="forum" AND f.tid=15 

Nota che il modulo forum funziona con modulo comment nucleo wich significa che solo il messaggio primo tema viene memorizzato in "field_data_body" e tutte le risposte sono memorizzati nella tabella "field_data_comment_body".

Speranza che aiuta

+0

Proprio quando stavi scrivendo stavo montando la questione di aggiungere ulteriori dettagli causa' ho studiato un po' – MultiformeIngegno

+0

e di aggiungere anche le risposte (unendo field_data_comment_body)? – MultiformeIngegno

+0

Non puoi unirti direttamente a "field_data_comment_body" devi prima partecipare alla tabella "comment" per ottenere l'id dell'entità del commento corretto. – Rouk