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

    Query annidate in mysql

    Ciao a tutti, ho un problema con una query che sto cercando di cortuire per ottenere dei dati risultati in wordpress.Posto in questa sezione in quanto il problema non è wordpress ma la query. Si tratta di un sistema di ricerca per hotel,ho delle checkbox dove posso selezionare una o più località, una o più categorie e uno o più servizi.Tralasciando per il momento i servizi una query che potrebbe venir fuori dalla selezione dei checkbox è la seguente:

    Codice PHP:
    SELECT wp_posts.* FROM wp_postmeta INNER JOIN wp_posts ON wp_postmeta.post_id wp_posts.ID AND wp_posts.post_status 'publish' WHERE wp_postmeta.post_id IN(SELECT wp_posts.id FROM wp_posts WHERE wp_postmeta.meta_key='Localita' AND wp_postmeta.meta_value='Siracusa' AND wp_posts.id IN (SELECT wp_posts.id FROM wp_postswp_postmeta WHERE wp_postmeta.meta_key='Categoria' AND wp_postmeta.meta_value='****' ) ) 
    Da questa query composta da più SELECT annidati mi aspetterei di trovare tutti gli hotel che si trovano a Siracusa ma che hanno categoria ****. In realtà invece mi vengono restituiti tutti gli hotel che si trovano a Siracusa,siano essi di categoria **,*** o ****.

    Gli AND e gli OR mi sembrano messi nel posto corretto, chi mi sa dire dove sbaglio?

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    363
    Questo pezzo non sembra corretto:
    SELECT wp_posts.id
    FROM wp_posts, wp_postmeta
    WHERE
    wp_postmeta.meta_key='Categoria' AND wp_postmeta.meta_value='****'

    devi specificare una qualche condizione di join fra le due tabelle.

  3. #3
    quindi come faresti?

    in effetti nelle località alla fine delle condizioni scrivo "AND wp_posts.id IN" e parto con l'altra SELECT, nel secondo caso mi limito a scrivere "WHERE
    wp_postmeta.meta_key='Categoria' AND wp_postmeta.meta_value='****'
    "....

    cosa mi conviene fare?

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    363
    Sinceramente mi sfugge il dominio del campo wp_postmeta.meta_value ....

  5. #5
    aspetta perchè a me sfugge il significato di dominio in questo contesto invece

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    363
    ... wp_postmeta.meta_value='Siracusa'
    e
    .... wp_postmeta.meta_value='****'

    http://www.slideshare.net/guestbe916...lo-relazionale

  7. #7
    dopo qualche giorno di assoluto sconforto riprendo a chiedere l'aiuto di qualche buona anima, spiegando meglio il tutto:

    le tabelle del db worpress che devono essere coinvolte sono 2. Una si chiama wp_posts che per quel che riguarda la ricerca ha solo l'id e l'unico controllo che devi fare su quella è che lo status sia public, l'altra tabella si chiama wp_postmeta e ha (oltre a un suo id univoco ovviamente) una chiave esterna con wp_posts con l'id del post e due campi che devo andare a vedere ovvero meta_key e meta_value. Tanto per capirci un possibile record (tralasciando l'id della tabella) è post_id=1, meta_key=Categoria e meta_value=****. Il record successivo potrebbe essere post_id=1, meta_key=Servizi, meta_value="Animali ammessi". Il record ancora successivo sarebbe post_id=1, meta_key=Localita e meta_value="Siracusa".

    In sostanza per esempio io con una query devo tirar fuori il post id che hanno meta_key=Categoria e meta_value=**** ma anche meta_key=Servizi e meta_value="Animali ammessi" e meta_key=Località e meta_value=Siracusa.

    Anche nel caso più semplice ovvero che un utente selezioni solo Siracusa e **** comunque mi escono tutti gli hotel di Siracusa, siano essi ** o ***.

    Tanto per prendere questo ultimo caso la query che viene fatta è questa:

    Codice PHP:
    SELECT wp_posts.* FROM wp_postmeta INNER JOIN wp_posts ON wp_postmeta.post_id wp_posts.ID AND wp_posts.post_status 'publish' WHERE wp_postmeta.post_id IN(SELECT wp_posts.id FROM wp_posts WHERE wp_postmeta.meta_key='Localita' AND wp_postmeta.meta_value='Siracusa' AND wp_posts.id IN (SELECT wp_posts.id FROM wp_postswp_postmeta WHERE wp_postmeta.meta_key='Categoria' AND wp_postmeta.meta_value='****' ) ) 
    Meglio così?

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 © 2026 vBulletin Solutions, Inc. All rights reserved.