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

    Problema con query di ricerca mysql

    Ho una tabella mysql che contiene le news di 6 "gruppi di news" differenti.
    Ogni "gruppo di news" contiene altri 3 "sottogruppi di news".
    Quindi per fare un esempio lo schema sarà così:

    gruppo news 1:
    --> sottogruppo 1
    --> sottogruppo 2
    --> sottogruppo 3

    gruppo news 2:
    --> sottogruppo 1
    --> sottogruppo 2
    --> sottogruppo 3

    gruppo news 3:
    --> sottogruppo 1
    --> sottogruppo 2
    --> sottogruppo 3

    ...e via dicendo

    La tabella mysql è così strutturata:

    I campi sono: id, id_gruppo, id_sottogruppo, titolo_news, testo_news.

    L'id è univoco della news, l'id_gruppo indica a quale gruppo principale appartiene la news, mentre l'id_sottogruppo indica a quale sottogruppo appartiene, che ovviamente sarà legato all'id_gruppo corrispondente.

    Ora arrivo al problema.
    Io mi trovo in questo ramo di news: "gruppo news 1" --> "sottogruppo 1"
    Quindi vorrei fare una ricerca per parola chiave in mysql in modo che mi cerchi SOLO nelle righe che hanno id_gruppo = 1 e id_sottogruppo = 1 e poi la parola chiave può essere trovata o nel campo titolo, oppure nel campo testo.
    Quindi i campi id_gruppo e id_sottogruppo devono essere obbligatori, mentre la ricerca basta che risulti vera in uno o in entrambi i campi titolo e testo.
    Il fatto è che sto facendo casino con gli operatori logici AND ed OR.

    Una query di esempio che ho provato era questa:

    SELECT *
    FROM `news`
    WHERE `id_gruppo` =1
    AND `id_sottogruppo` =1
    OR `titolo_news` LIKE '%parola%'
    AND `testo_news` LIKE '%parola%'
    LIMIT 0 , 30

    Così mi cerca si nel campo titolo e testo e basta che trovi qualcosa in uno dei due, ma se non trova nulla in questi campi (titolo e testo) mi restituisce lo stesso qualcosa, perchè risultano vere le query ai campi id_gruppo e id_sottogruppo!!!!
    Mentre io vorrei che se mi trovasse una corrispondenza in id_gruppo, id_sottogruppo, ma non in titolo_news o testo_news, non restituisse nulla!
    Sono stato abbastanza chiaro?

    Thx

  2. #2
    codice:
    SELECT * 
    FROM `news` 
    WHERE `id_gruppo` = 1
    AND `id_sottogruppo` = 1
    AND
    (`titolo_news` LIKE '%parola%'
    OR `testo_news` LIKE '%parola%')
    LIMIT 0 , 30
    dovrebbe bastare scambiare OR / AND....


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

  3. #3
    Mitico!
    Non avevo pensato alle parentesi per dare l'ordine di precedenza!
    Ora funziona

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.