Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di Ranma2
    Registrato dal
    Mar 2003
    Messaggi
    2,648

    [MYSQL] Prediligere un record rispetto ad un altro

    Ho la seguente tabella:

    codice:
    ID    ID_CITTA    TITOLO    LINGUA
    1    100    Roma    it
    2    100    Rome    (stringa vuota)
    3    123    Paris    (stringa vuota)
    Devo estrapolare le due città (Roma(id:1) e Paris(id:3)) seguendo queste regolette:
    - C'è sempre un valore (stringa vuota) per ogni città, quindi non può esistere una città con solo 'it' o solo 'en', c'è sempre almeno (stringa vuota)
    - Se c'è un record con la lingua definita comanda su (stringa vuota)
    - Nei paramentri di ricerca cerco solo (stringa vuota) e una lingua, in questo caso 'it'

    Ho provato in tutti i modi possibili, ma o per mie mancanze o per l'impossibilità di farlo non sono riuscito ad estrapolare i dati esatti

  2. #2
    Utente di HTML.it L'avatar di Mashin
    Registrato dal
    Jul 2010
    Messaggi
    187
    Quindi ogni citta ha al massimo due record: uno con valorizzato la lingua e uno senza ? o ci puo' essere una citta' con 2 o piu' lingue, oltre ovviamente il record con vuota ?

    P.S. son quasi in uscita dal lavoro. Se non hai trovato una soluzione nel mentre domani provo qche soluzione

  3. #3
    Utente di HTML.it L'avatar di Ranma2
    Registrato dal
    Mar 2003
    Messaggi
    2,648
    Originariamente inviato da Mashin
    Quindi ogni citta ha al massimo due record: uno con valorizzato la lingua e uno senza ? o ci puo' essere una citta' con 2 o piu' lingue, oltre ovviamente il record con vuota ?
    Ogni città può avere n record in base alle lingue associate, il minimo è 1 record (vuoto)

  4. #4
    Utente di HTML.it L'avatar di Mashin
    Registrato dal
    Jul 2010
    Messaggi
    187
    Ma di preciso tu cosa vuoi estrarre ? Interroghi per lingua e vuoi un tabulato che riporti le citta con evidenza di quella lingua + tutte quelle che non ce l'hanno ?

    Scusa sono a fine giornata e non sono molto lucido ^^'

  5. #5
    Utente di HTML.it L'avatar di Ranma2
    Registrato dal
    Mar 2003
    Messaggi
    2,648
    Originariamente inviato da Mashin
    Ma di preciso tu cosa vuoi estrarre ? Interroghi per lingua e vuoi un tabulato che riporti le citta con evidenza di quella lingua + tutte quelle che non ce l'hanno ?

    Scusa sono a fine giornata e non sono molto lucido ^^'
    Praticamente è un database con tutte le città del mondo, per ogni città c'è una dicitura internazionale ("rome"), e per alcune lingue c'è la dicitura localizzata (per l'italiano "roma"), per il russo potrebbe essere in caratteri cirillici, per il cinese con gli ideogrammi e via dicendo.

  6. #6
    Utente di HTML.it L'avatar di Mashin
    Registrato dal
    Jul 2010
    Messaggi
    187
    mi e' venuta in mente una possibile soluzione.

    Prendi la tabella e filitri con lingua=stringa null. chiamiamola tab A.
    Prendi la stessa tabella e la rifiltri con lingua=parametro di input. chiamiamola tab B

    Metti in left join le due query in line per citta.

    A questo punto se B.ID non e' null vuol dire che hai una lingua valorizzata e usi i valori di B, altrimenti vuol dire che c'era solo il valore con stringa vuota ed esponi i valori di A.

    Na roba tipo
    codice:
    select
       coalesce(B.id, a.id) as ID,
       a.id_citta,
       a.titolo,
       coalesce(b.lingua,a.lingua) as lingua 
    from
       ( select * from tabella where lingua='') as A left join
       (select  * from tabella where lingua=<parametro>) as B
        on a.id_citta=b.id_citta
    ti trovi ?

  7. #7
    Secondo me c'è un metodo più parco di memoria (ma va testato):

    puoi cercare con WHERE lingua = VALORE OR lingua = NULL ORDER BY lingua ASC|DESC LIMIT 2;

    Così ottieni sempre due risultati il primo con lingua NULL ed il secondo con lingua = valore! (non sono sicuro sul desc o asc per ottenerli in ordine!

    A questo punto tu imposti il tuo ciclo while per recuperare i risultati, se usi le stesse variabili ottieni automaticamente il nome localizzato se esiste la versione localizzata ed il nome generico se non esiste! Non so se mi sono spiegato bene... Però di certo la query è meno impegnativa di quella sopra che è doppia ed usa join...
    Can You See Curtains? Then Isn't Windows!

  8. #8
    Utente di HTML.it L'avatar di Mashin
    Registrato dal
    Jul 2010
    Messaggi
    187
    Limit =2 non forza l'esito della query a 2 soli risultati ? Non mi pare sia quello che desidera lui. Da quanto ho capito lui vorrebber TUTTE le citta' con lingua=parametro o lingua= vuoto. Nel caso una citta' abbia sia parametro che vuoto deve essere selezionato il record con lingua =parametro.

  9. #9
    ranma, s'è più o meno capito cosa hai nelle tabelle. non si capisce invece cosa tu voglia estrarre

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.