Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591

    [MYSQL] query motore di ricerca con più clausole concatenate

    mi scuso per il titolo ma non saprei come scriverlo..
    allora, sto cercando da stanotte di venire a capo di una query, e vado a illustrare.

    ho tre tabelle unite con join, e fino a qui tutto bene.
    dopodichè, tramite PHP, l'utente inserisce delle parole chiave che mi scremano i risultati. fino a che sono solo parole tutto ok...
    A queste ho aggiunto una clausola che screma i dati per un campo = 0 o = 1.
    e qua cominciano i dolori..
    perchè ho dei risultati inaspettati..
    Se faccio la query
    Codice PHP:
    SELECT *
    FROM catalogo
    LEFT JOIN marche ON 
    catalogo.marca marche.m_id )
    LEFT JOIN categorie ON catalogo.Categoria categorie.c_id )
    WHERE outlet =0
    AND (
    categorie.CATEGORIA LIKE '%idromassaggio%'
    OR marche.MARCA LIKE '%idromassaggio%'
    OR catalogo.nomeprodotto LIKE '%idromassaggio%'
    OR catalogo.descrizione LIKE '%idromassaggio%'
    OR catalogo.codice LIKE '%idromassaggio%'
    )
    OR (
    categorie.CATEGORIA LIKE '%ufficio%'
    OR marche.MARCA LIKE '%ufficio%'
    OR catalogo.nomeprodotto LIKE '%ufficio%'
    OR catalogo.descrizione LIKE '%ufficio%'
    OR catalogo.codice LIKE '%ufficio%'

    mi restituisce un risultato che ha come valore outlet = 1.. anche mettendo AND alla seconda "tornata" invece di OR non da il risultato sperato.
    nell'ultima mezz'ora, dopo 3-4 ore di prove, sono arrivato a questa query.

    Codice PHP:
    SELECT *
    FROM catalogo
    LEFT JOIN marche ON 
    catalogo.marca marche.m_id )
    LEFT JOIN categorie ON catalogo.Categoria categorie.c_id )
    WHERE outlet =
    AND (
    categorie.CATEGORIA LIKE '%idromassaggio%'
    OR marche.MARCA LIKE '%idromassaggio%'
    OR catalogo.nomeprodotto LIKE '%idromassaggio%'
    OR catalogo.descrizione LIKE '%idromassaggio%'
    OR catalogo.codice LIKE '%idromassaggio%'
    )
    OR 
    outlet 0
    AND (
    categorie.CATEGORIA LIKE '%prodo%'
    OR marche.MARCA LIKE '%prodo%'
    OR catalogo.nomeprodotto LIKE '%prodo%'
    OR catalogo.descrizione LIKE '%prodo%'
    OR catalogo.codice LIKE '%prodo%'

    è corretta? devo sempe ripetere la forma OR outlet = 0 prima di ogni AND seccessivo?
    DOMANDA CLASSICA: "che risultati vuoi ottenere?" i risultati che voglio ottenere sono: "TUTTI QUELLI CON outlet = 0 e tutte le voci cercate (sommate) che rispondono alla ricerca di tipo LIKE: cioè se in un record c'è scritto prodotti e in un altro idromassaggio, la query sopra troverà 2 record..".
    Ulteriore domanda.
    Se volessi (e devo.. ) aggiungere un altro campo, ad esempio tipologia = 0 oppure 1, per scremare i dati come dovrei fare?

    ringrazio chiunque mi possa dare una mano

  2. #2
    La query toppa per un problema di precedenza degli operatori. Aggiungi una parentesi che raggruppi i due blocchi di OR, in OR tra di loro e non con la AND.

    Codice PHP:
    WHERE outlet =0
    AND ((
    categorie.CATEGORIA LIKE '%idromassaggio%'
    OR marche.MARCA LIKE '%idromassaggio%'
    OR catalogo.nomeprodotto LIKE '%idromassaggio%'
    OR catalogo.descrizione LIKE '%idromassaggio%'
    OR catalogo.codice LIKE '%idromassaggio%'
    ) OR (
    categorie.CATEGORIA LIKE '%ufficio%'
    OR marche.MARCA LIKE '%ufficio%'
    OR catalogo.nomeprodotto LIKE '%ufficio%'
    OR catalogo.descrizione LIKE '%ufficio%'
    OR catalogo.codice LIKE '%ufficio%'
    ))
    AND 
    tipologia 1
    AND pippo like '%pallino%'

    etc.... 

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    infatti era quello che pensavo.. stavo diventando PIU' scemo di quanto non lo sia già..

    grazie tanto..

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.