Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di Graboid
    Registrato dal
    Oct 2004
    Messaggi
    619

    [SQL] XOR? Non fa quello che mi aspettavo

    Ciao, ho la seguente query e il problema sta sulla linea in rosso:

    codice:
    SELECT
    `tbl_products`.`idProduct`,
    `tbl_products_content`.`title`,
    `tbl_products_visibility`.`enabled`,
    `tbl_products_tree_content`.`name`
    FROM
    `tbl_products`
    Inner Join `tbl_products_content` ON `tbl_products_content`.`fkProduct` = `tbl_products`.`idProduct`
    Inner Join `tbl_products_visibility` ON `tbl_products_visibility`.`fkProduct` = `tbl_products`.`idProduct`
    Inner Join `tbl_products_tree` ON `tbl_products`.`fkNode` = `tbl_products_tree`.`idNode`
    Inner Join `tbl_products_tree_content` ON `tbl_products_tree_content`.`fkNode` = `tbl_products_tree`.`idNode`
    WHERE
    `tbl_products_content`.`fkLang` =  '1' AND
    `tbl_products_content`.`fkSite` =  '1' AND
    `tbl_products_visibility`.`fkLang` =  '1' AND
    `tbl_products_visibility`.`fkSite` =  '1' AND
    `tbl_products_visibility`.`deleted` =  '0' AND
    (`tbl_products_tree_content`.`fkLang` =  '1'  XOR `tbl_products_tree_content`.`fkLang` =  '2') 
    ORDER BY
    `tbl_products_tree`.`rank` ASC
    Io vorrei riuscire ad estrarre `tbl_products_tree_content`.`name` in lingua 2 se esiste un record che ha fkLang 2 senno in lingua 1 che sicuramente esiste, pensavo di riuscirci grazie alla linea scritta in rosso ma non è così.
    E' possibile fare quello che voglio con una sola query?

  2. #2
    Utente di HTML.it L'avatar di Graboid
    Registrato dal
    Oct 2004
    Messaggi
    619
    Piero.mac vieni in mio aiuto...

  3. #3
    Se ho capito bene tu vorresti che la tua condizione valutasse piu' righe contemporaneamente mentre la condizione che hai scritto si applica solo su una riga alla volta

    Cerco di spiegare a parole come farei io poi la query la fai tu perche' non conosco bene la struttura del tuo DB.

    in italiano

    Seleziona tutte le righe che hanno lingua=2 OPPURE (lingua=1 e il cui id non sia tra quelli che hanno lingua=2)

    in pseudo SQL

    codice:
    SELECT .... WHERE fkLang = 2 OR (fkLang =1 AND idProduct NOT IN ( SELECT ... WHERE fkLang =2))

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.