Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505

    MySql - Where su union all

    Salve. Io ho questa query :

    codice:
    SELECT nome, nascita FROM allenatori as t1
    UNION ALL
    SELECT nome, nascita FROM squadra as t2
    WHERE nascita='04/12/2010'
    vorrei applicare il WHERE a tutta la tabella, invece me la applica realmente solo a t2. (mi restituisce i valori in t2 che matchano la data, e TUTTA la tabella t1).

    Come posso fare?

    Saluti

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Devi applicare la clausola su ogni tabella.

    codice:
    SELECT nome, nascita FROM allenatori WHERE nascita='04/12/2010'
    UNION ALL
    SELECT nome, nascita FROM squadra WHERE nascita='04/12/2010'
    Se hai memorizzato le date in quel formato sono stringhe.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    si le ho memorizzate come stringhe perchè mi trovo meglio a gestirle in PHP (il datetime è un pò scomodo).

    Ad ogni modo : si funziona. Perfetto. Se ora volessi che tutti i nomi siano ordinati in ordine alfabetico? (non mi riferisco alla singola tabella, ma a quella totale dopo la union)

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da markzzz
    si le ho memorizzate come stringhe perchè mi trovo meglio a gestirle in PHP (il datetime è un pò scomodo).
    Non ha alcun senso salvare le date in quel modo. Usa un campo di tipo date. Te ne accorgerai quando avrai necessità di fare interrogazioni temporali e sarai ogni volta costretto a usare str_to_date() per convertirle in date vere e proprie.

    Originariamente inviato da markzzz
    Ad ogni modo : si funziona. Perfetto. Se ora volessi che tutti i nomi siano ordinati in ordine alfabetico? (non mi riferisco alla singola tabella, ma a quella totale dopo la union)
    Metti un semplice order by nome alla fine della query.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    In che senso scusa? perchè è più veloce l'interrogazione forse? Io vedo che su php faccio un semplice $date=date("d/m/Y"); e mi prende la data come voglio (posso benissimo fare $date=date("Y/m/d").

    Se uso DATETIME (o DATE) su Mysql sono costretto a inserire la data sempre in formato americano (anno/mese/giorno) e, quando vado a stamparle (su un sito italiano) mi tocca convertirle (con string tokenizer e array) nel formato che voglio.

    In quel senso mi vien più comodo usare direttamente la stringa (anche se si, in termini di performance forse è peggiore).

    Te cosa proporresti?

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da markzzz
    Se uso DATETIME (o DATE) su Mysql sono costretto a inserire la data sempre in formato americano (anno/mese/giorno) e, quando vado a stamparle (su un sito italiano) mi tocca convertirle (con string tokenizer e array) nel formato che voglio.
    Inserisci la data nel formato atteso da mysql (aaaa-mm-gg) e poi la visualizzi come meglio ti aggrada con la funzione date_format()

    es.

    select date_format('2010-12-04','%d/%m/%Y') as data_it

    al posto della data del mio esempio userai il nome del campo.

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    bello questo date_format Non lo conoscevo!!! grazie

  8. #8
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Prego. Come ti accennavo prima esiste pure la funzione str_to_date() che fa l'esatto opposto.

    es.

    select str_to_date('04/12/2010','%d/%m/%Y') as ansi_data

    quindi ti consiglio di usarla per aggiornare le tue tabelle e salvare le date nel formato opportuno.

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    scusa se rialzo questo topic, ma si parlava della data da convertire. Purtroppo credo di non poter fare una cosa del genere.

    In quanto, ho la necessità di lasciare all'utente la possibilità di non inserire (per esempio) il giorno, o il mese, o entrambi...e quindi magari solo l'anno.

    Quindi, anche lavorando con PHP, e ottenendo i dati in questo modo :

    codice:
        $day=(is_numeric($_POST['day']) && $_POST['day'] > 0 && $_POST['day'] < 32) ? $_POST['day'] : '00';
        $month=(is_numeric($_POST['month']) && $_POST['month'] > 0 && $_POST['month'] < 13) ? $_POST['month'] : '00';
        $year=(is_numeric($_POST['year']) && $_POST['year'] > 1999 && $_POST['year'] < (date("Y")+1)) ? $_POST['year'] : '0000';			
        $data=date('Y-m-d', strtotime($year."-".$month."-".$day));
        echo $data;
    mi accorgo che se inserisco 00-12-2010 e converto i dati, MySql si accorge che non è possibile tutto ciò (non esiste il giorno 00), e mi stampa 2010-11-30 (cioè il giorno prima).

    Quindi dovrò ragionare solo con i varchar ho idea...

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.