Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [MYSQL] union tra tre tabelle

    Ciao a tutti,
    Come ho scritto nel titolo sto cercando di realizzare una query tra tre tabelle, quest'ultime sono la creazione dell'installazione di wordpress.

    Avevo pensato di utilizzare l'inner join ma tra tre tabelle non saprei da dove iniziare e cosi ho pensato ad unire le tre tabella con la clausola union e poi impostare un where che ricavi il tutto.

    Questa è la query che sto utilizzando
    Codice PHP:
    SELECT FROM wp_posts AS post UNION SELECT relation.object_id 
    FROM wp_term_relationships 
    AS relation UNION SELECT meta.meta_value 
    FROM wp_postmeta 
    AS meta 
    WHERE post
    .ID=relation.objcet_id AND term_taxonomy_id='70' AND meta.post_id=post.ID 
    Purtroppo viene indicato il seguente errore
    #1222 - The used SELECT statements have a different number of columns

    Altrimenti se trovo qualcuno di voi che mi spiega come creare un inner join tra tre tabelle utilizzo la seguenti query che funziona benissimo.
    Codice PHP:
    SELECT post.ID AS ID,post.post_title AS post_title,post.post_content AS post_contentpost.guid as link 
    FROM wp_posts 
    AS post INNER JOIN wp_term_relationships AS relation 
    WHERE post
    .ID=relation.object_id AND post.post_status='publish' AND term_taxonomy_id='70' ORDER BY post.post_date DESC 
    Vi vado a indicare cose devo estrapolare:
    - post con la stato pubblico
    - post che abbiano la categoria xxx
    - ricavare il meta tag del post, in questo modo posso ricavare l'immagine associata all'articolo

    Grazie di tutto...

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    sono un po' confuso, comunque per ordine

    1) UNION funziona solo (e solamente) se le tuple risultanti sono uguali
    Puoi "fondere" un qualcosa del genere

    nome1, cognome1, indirizzo1

    UNION

    nome2,cognome2,indirizzo2

    ----

    Questo invece non lo puoi fare (direttamente)

    nome1, cognome1, indirizzo1,citta

    UNION

    nome2,cognome2,indirizzo2

    2) per il resto non ho capito benissimo cosa vuoi fare, sono "bombardato" di lavori, se mi libero provo a darti una mano

  3. #3
    Ti ringrazio per la risposta intanto io sto andando avanti e sono riuscito a migliorare la query con l'inner join, creando un inner join fra tre tabelle

    Codice PHP:
    SELECT post.ID AS ID,post.post_title AS post_title,post.guid as link,meta.meta_value,relation.object_id as idRelation,relation.term_taxonomy_id as Categoria FROM wp_posts AS post INNER JOIN wp_term_relationships AS relation 
    INNER JOIN wp_postmeta 
    as meta 
    WHERE post
    .ID=relation.object_id AND post.post_status='publish' AND 
    term_taxonomy_id='70' AND meta.post_id=post.ID 
    AND meta.meta_key='type_images' AND relation.object_id=post.ID ORDER BY post_date DESC 
    In questo momento sono riuscito a estrapolare l'immagine dell'articolo che era quello che mi serviva di più.
    E andando avanti con il mio progetto devo riuscire a trovare i tag associati all'articolo e poi ho terminato con la query e posso iniziare a dare una veste grafica al tutto.

    Diciamo che le tabelle di wordpress non mi stanno dando una mano a capire le varie relazioni che hanno...

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    personalmente non ti consiglio di usare la sintassi esplicita dell'inner join, soprattutto con più tabelle e campi coinvolti diminuisce la leggibilità, ti basta mettere

    "where tabella1.campo1=tabella2.campo2" e così via (ma non cambia nulla)
    ---
    invece poni più attenzione alla sequenza di WHERE che metti, cominciando dai campi indiciati.
    Attenzione, inoltre, a mettere le parentesi nelle varie clausule AND (c'è la priorità degli operatori, ma in generale è meglio andare sull'esplicito piuttosto che sull'implicito)

  5. #5
    Purtroppo le condizioni che ho posto hanno tutte la stessa importanza e non saprei come gestirle con le parentesi...

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    bhè non è difficile, ti basta usare un explain della query, per vedere qual'è la situazione.

    Riguardo all'ordine, normalmente, si comincia coi join e poi i "filtri" partendo
    da quelli più corti ed indiciati.

    Verifica l'esistenza di indici sui vari campi usati per i join, se la cardinalità delle tabelle è > circa 50 righe (altrimenti rallenta, invece di velocizzarsi).
    Attenzione infine all'ordinamento per post_date

    WHERE
    (post.ID=relation.object_id) AND
    (relation.object_id=post.ID) AND
    (meta.post_id=post.ID) AND

    (term_taxonomy_id='70') AND
    (post.post_status='publish') AND
    (meta.meta_key='type_images')

    ORDER BY post_date DESC

  7. #7
    grazie mille per l'aiuto dato!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.