Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di Van83
    Registrato dal
    Jan 2010
    Messaggi
    66

    [MySql] Problemi con operatori AND ed OR

    Ciao a tutti,
    ho un insolito problema con una query su due tabelle e con gli operatori AND ed OR.

    Una tabella mi serve per ottenere un id e l'altra per la visualizzazione dei dati.

    La query incriminata è questa:
    Codice PHP:
    SELECT FROM 
    tbl1 
    INNER JOIN 
    tbl2
    ON 
    tbl2
    .post_id tbl1.ID 
    WHERE 
    (tbl2.meta_key "wpcf-livelloesperienza" AND tbl2.meta_value LIKE "%Senior%"
    AND 
    (
    tbl2.meta_key "wpcf-areafunzjob" AND tbl2.meta_value LIKE "%sales-marketing%"
    GROUP BY tbl2.post_id 
    HAVING tbl2
    .post_id tbl1.ID 
    La query, così fatta restituisce null, o 0 righe, mentre se metto un OR tra un blocco e l'altro () , ottengo i risultati corretti, con le righe doppie del tipo:
    sia le righe corrette, che le altre che hanno almeno un blocco vero (come da algoritmo OR).

    La query dovrebbe restituire 3 risultati.

    Dite che mi conviene dividerla in 2 query ? Prima la ricerca sulla tabella 2 e poi quella sulla tabella 1 ?

    Potrebbe essere un problema della versione di Mysql ??


    Vi ringrazio.

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    Quote Originariamente inviata da Van83 Visualizza il messaggio
    Ciao a tutti,
    ho un insolito problema con una query su due tabelle e con gli operatori AND ed OR.

    Una tabella mi serve per ottenere un id e l'altra per la visualizzazione dei dati.

    La query incriminata è questa:
    Codice PHP:
    SELECT FROM 
    tbl1 
    INNER JOIN 
    tbl2
    ON 
    tbl2
    .post_id tbl1.ID 
    WHERE 
    (tbl2.meta_key "wpcf-livelloesperienza" AND tbl2.meta_value LIKE "%Senior%"
    AND 
    (
    tbl2.meta_key "wpcf-areafunzjob" AND tbl2.meta_value LIKE "%sales-marketing%"
    GROUP BY tbl2.post_id 
    HAVING tbl2
    .post_id tbl1.ID 
    La query, così fatta restituisce null, o 0 righe, mentre se metto un OR tra un blocco e l'altro () , ottengo i risultati corretti, con le righe doppie del tipo:
    sia le righe corrette, che le altre che hanno almeno un blocco vero (come da algoritmo OR).

    La query dovrebbe restituire 3 risultati.

    Dite che mi conviene dividerla in 2 query ? Prima la ricerca sulla tabella 2 e poi quella sulla tabella 1 ?

    Potrebbe essere un problema della versione di Mysql ??


    Vi ringrazio.
    Ciao,

    mi sembra che nelle condizioni della query....
    codice:
    (tbl2.meta_key = "wpcf-livelloesperienza" AND tbl2.meta_value LIKE "%Senior%") 
    AND 
    (tbl2.meta_key = "wpcf-areafunzjob" AND tbl2.meta_value LIKE "%sales-marketing%")
    adesso, come fa un field (tbl2.meta_key) ad avere contemporaneamente due valori diversi ( = "wpcf-livelloesperienza" ..... = "wpcf-areafunzjob" ) ????

    credo che la query giustamente restituisce nessun record
    Ultima modifica di 123delphi321; 12-05-2014 a 14:51

  3. #3
    Utente di HTML.it L'avatar di Van83
    Registrato dal
    Jan 2010
    Messaggi
    66
    Ciao,

    hai ragione, ma mettendo le parentesi non dovrebbero vedersi come due condizioni distinte ?

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    la condizione applicata tramite la clausola WHERE deve soddisfare il record in esame.

    ...per vederle come due condizioni diverse deve esserci l' OR.

  5. #5
    Utente di HTML.it L'avatar di Van83
    Registrato dal
    Jan 2010
    Messaggi
    66
    E nel caso io avessi l'esigenza di effettuare una query che mi ritorni questo mix dovrei effettuare una select di select sulla stessa tabella ?

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    Quote Originariamente inviata da Van83 Visualizza il messaggio
    E nel caso io avessi l'esigenza di effettuare una query che mi ritorni questo mix dovrei effettuare una select di select sulla stessa tabella ?
    ma perchè con l' OR non basta? (hai detto che con l' OR funzionava correttamente)

    altrimenti puoi fare anche select di select e utilizzare anche UNION o altro ancora... Dipende sempre dal risultato che devi ottenere

  7. #7
    Utente di HTML.it L'avatar di Van83
    Registrato dal
    Jan 2010
    Messaggi
    66
    Con OR funziona correttamente l'OR, nel senso che trova tutti gli ID del primo blocco ed accoda quelli del secondo, mentre a me servono solo quelli che hanno ID comune.

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    ciao, forse non ho capito bene il problema:

    cosa intendi per primo e secondo blocco?


    se intendi quei record che soddisfano la prima condizione:
    (tbl2.meta_key = "wpcf-livelloesperienza" AND tbl2.meta_value LIKE "%Senior%")

    uniti a quei record che soddisfano la seconda condizione:
    (tbl2.meta_key = "wpcf-areafunzjob" AND tbl2.meta_value LIKE "%sales-marketing%")


    allora come dicevo prima il risultato sara nullo perche non esiste un ID in comune.


    in alternativa potresti spiegare meglio il problema?
    Ultima modifica di 123delphi321; 12-05-2014 a 18:10

  9. #9
    Utente di HTML.it L'avatar di Van83
    Registrato dal
    Jan 2010
    Messaggi
    66
    Ciao!!

    Praticamente ho un form di ricerca avanzato, in ajax, su wordpress che va a leggere dei campi approfonditi legati ad un post.

    Il problema è che questi valori non sono colonne, ma valori riga di una stessa colonne e quindi intrecciare i dati e recuperare gli ID in base al valore di minimo due ad un massimo di 5 righe. Se non mi sono spiegato provo a mettere uno screen del DB

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    non capisco il problema di ajax o altro in quanto non conosco ajax...

    io posso darti un aiuto riguardo la query

Tag per questa discussione

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.