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

    problema di query con negazione

    Ho una query che funziona bene cercando una stringa all'interno di un campo, come per esempio:
    Codice PHP:
    SELECT FROM cd
    WHERE $_POST
    [autoreLIKE autore 
    mettiamo di avere 3 cd registrati, la query per esempio me ne trova 2 dello stesso autore che stavo cercando.
    Io vorrei ottenere la query inversa, ovvero escudere i 2 risultati trovati ed individuare solo i rimanenti. Provando con:
    Codice PHP:
    SELECT FROM cd
    WHERE 
    !($_POST[autoreLIKE autore
    la query sembra funzionare su alcuni campi, mentre non su altri, soprattutto quando la query si fa più complessa ed i campi sono messi in relazione tra loro. I risultati ottenuti non sono facilmente interpretabili, sembra che mysql vada un po' a caso nel selezionare i dati.
    Quello che non riesco proprio a capire è come mai in tutti i casi la forma normale, quella senza l'operatore !, funziona, mentre la forma inversa a volte funziona e a volte no. Non basta mettere l'operatore ! per invertire i risultati della ricerca?

  2. #2
    Codice PHP:
    WHERE $_POST[autoreNOT LIKE '%autore%' 

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

  3. #3
    Ho provato questa variante ma mi da gli stessi problemi.

  4. #4
    Originariamente inviato da giancarlo75
    Ho provato questa variante ma mi da gli stessi problemi.
    avvevo copiato la tua riga con la testa nel sacco....

    Codice PHP:
    WHERE campo_autore NOT LIKE '%$_POST[autore]%' 

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

  5. #5
    In realtà sono io che ho la testa tra le nuvole perchè la prima era:
    Codice PHP:
    SELECT FROM cd
    WHERE 
    !(autore LIKE $_POST[autore]) 
    quindi ora diventa:
    Codice PHP:
    SELECT FROM cd
    WHERE 
    (autore NOT LIKE $_POST[autore]) 
    ma comunque non funziona.
    E' facile vedere se funziona o no perchè ho 30 righe nel database, quindi se la query senza il "NOT" ne trova 12, l'altra dovrebbe trovare le rimanenti 18. Purtroppo non è così.

  6. #6
    Originariamente inviato da giancarlo75
    In realtà sono io che ho la testa tra le nuvole perchè la prima era:
    Codice PHP:
    SELECT FROM cd
    WHERE 
    !(autore LIKE $_POST[autore]) 
    quindi ora diventa:
    Codice PHP:
    SELECT FROM cd
    WHERE 
    (autore NOT LIKE $_POST[autore]) 
    ma comunque non funziona.
    E' facile vedere se funziona o no perchè ho 30 righe nel database, quindi se la query senza il "NOT" ne trova 12, l'altra dovrebbe trovare le rimanenti 18. Purtroppo non è così.
    ci sono poche scelte. O c'e' la stringa oppure no. Quindi il problema nasce "forse" dalla JOIN delle tabelle relazionate di cui fai accenno prima. Dipende forse anche dal tipo di campo usato, character set... Dalla sintassi....

    Codice PHP:
    SELECT FROM cd
    WHERE 
    (autore NOT LIKE $_POST[autore]) 
    questa query per esempio non e' corretta perche cerchi una stringa e non un campo... poi senza il carattere % (jolly) cerca solo esattamente la NON esatta stringa e non se la stringa NON e' contenuta all'interno del campo.

    insomma la query deve essere come ho messo prima.
    Codice PHP:
    SELECT FROM cd
    WHERE autore NOT LIKE 
    '%$_POST[autore]%' 
    Sarebbe comunque meglio verificare il contenuto di $_POST[autore] invece di passarlo tale e quale come ricevuto dal form

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

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.