Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [MySql] Order By Data Su 2 tabelle Il Cui Campo Data Non Ha Lo stesso Nome

    tabellaCani [nomeCane, dataNascitaCane]
    tabellaGatti [nomeGatto, dataNascitaGatto]

    come ottenere nomeCane e nomeGatto, in modo che i risultati compaiano ordinati per data? i nomi dei campi data sono diversi nelle due tabelle (dataNascitaCane, dataNascitaGatto), ed è quello il "problema": i dati ritornati non si devono raggruppare per tipo di animale e poi per data, ma solo per data

    esempio banale e ipersemplificato:

    cane9 (2011)
    cane2 (2011)
    gatto5 (2011)
    cane8 (2010)
    gatto9 (2003)
    gatto2 (2002)
    gatto7 (2002)
    cane4 (2002)

    Grazie in anticipo

    ps: mysql

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    iniziamo col dire che se non stai shardando (cosa che dubito fortissimamente) era assai meglio fare una tabella "animali" con dentro "tipoanimale"

    una soluzione VQD (VERY quick-and-dirty) è banalmente

    codice:
    Select * from tabellagatti
    union
    select * from tabellacani
    order by 2 desc

  3. #3
    Dnque le tabelle non sono affatto come nell' esempio: l'esempio è una banalizzazione per focalizzarsi solo sul problema che riscontro - in realtà si tratta di dati assolutamente etereogenei su tabelle molto molto grandi che or ora sorge la necessità di ordinare per data in maniera congiunta.

    Potresti spiegarmi (brevemente, per carità: giusto per capire un minimo la logica della cosa) il significato della espressione

    order by 2

    Come mai quel numero verrebbe interpretato come un riferimento alla data?

    grazie!

  4. #4
    ps se 2 è un riferimento al numero del campo, no: le tabelle non hanno la data allo stesso indice.

    Abbiamo a che fare in realtà con oltre 4 milioni di record.
    la prima tabella ha 8 campi, la seconda 15. nella prima tabella la data è al campo 3 nella seconda al campo 15

  5. #5
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da TrueLies
    ps se 2 è un riferimento al numero del campo, no: le tabelle non hanno la data allo stesso indice.

    Abbiamo a che fare in realtà con oltre 4 milioni di record.
    la prima tabella ha 8 campi, la seconda 15. nella prima tabella la data è al campo 3 nella seconda al campo 15
    Ecco, bravo, comincia intanto a dire le cose come stanno.
    Se tu fai esempi che nulla hanno a che fare con la realtà che stai affrontando è impossibile intendersi.

    In Order by 2, il 2 si riferisce al numero ordinale del campo, e dato che TU hai indicato 2 campi, è pacifico che si riferisce al 2° campo.
    Vedi perchè è importante spiegare le cose come stanno, invece di fare esempi 'strani'?

    Inoltre:
    - parli di date, ma mostri anni
    - non si capisce se devi ordinare, raggruppare o entrambe le cose
    - 4 milioni di record come?
    --- per entrambe le tabelle, ovvero 8 milioni?
    --- divisi su 2 tabelle, ovvero 2 milioni ognuna?
    --- oppre come?


  6. #6
    Scusami ma purtroppo occorre contemperare una serie di esigenze: per ovvi motivi non posso postare la vera natura delle tabelle, e bisogna trovare un compromesso fra il post troppo complesso e dettagliato e la semplificazione. La mia idea (se sbagliata me ne scuso) era di ottenere la soluzione ottimale indipendentemente dal fatto che l' esempio fosse dichiaratamente ipersemplificato. Pensavo di rendervi le cose più facili: sono animato dalle migliori intenzioni

    Ad ogni modo se tu ritieni più opportuno, procedo a fornirti i dati che hai richiesto:

    - parli di date, ma mostri anni : come dicevo era ipersemplificato. Se serve essere precisi: timestamp

    - non si capisce se devi ordinare, raggruppare o entrambe le cose: devo ottenere alcuni campi da delle tabelle (in realtà abbiamo 27 di tabelle: sarei già contento se riuscissi a risolvere per le prime due), e i campi selezionati debbono essere ordinati per data (timestamp), per cui i record potranno mescolarsi "promiscuamente" nell' output, poichè gli viene richiesto solo di essere ordinati per data

    - 4 milioni di record come? brutti cattivi e tosti

    --- per entrambe le tabelle, ovvero 8 milioni? allora, se devo essere preciso e la cosa può essere utile: abbiamo 8.234.091 di record (oggi, domattina saranno di più)

    --- divisi su 2 tabelle, ovvero 2 milioni ognuna? no, una ne ha 6.541.222 (oggi, domani non lo so: potrebbe averne 50.000 di meno o 100 di più, o 100 di meno o 35000 di più, insomma non si sa) l'altra 1.692.869 (domani saranno di più, difficile siano di meno)

    Il problema è appunto che i campi data hanno nomi diversi e non sono alla stessa posizione numerica: su Google cercando sql+"order by date"+"different names" e varie combinazioni simli non riesco a trovare una sintassi che faccia al caso.

    grazie di nuovo in anticipo!

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    cominciamo col dire che potresti benissimo postare un dump delle tabelle (delle prime righe della tabelle) senza particolari patemi, ed avresti la risposta "definitiva"
    ---
    Riguardo al resto se vuoi fare un "mischione" devi avere una lista di campi che sia analoga per entrambe le tabelle.
    Non è difficile da fare, basta invece di fare un select * from blablabla mettere i singoli campi
    codice:
    select nome as campo1, cognome as campo2, indirizzo as campo3 from tabella1
    union
    select citta as campo1, cap as campo2, via as campo3 from tabella2
    order by campo2 desc
    eventualmente dovrai porre dei CAST per uniformare il tipo di campo tra le varie tabelle.
    Considera che è una modalità estremamente inefficiente, in quanto generi tabelle temporanee che poi andranno ordinate, al 99% ti beccherai sia using filesort che union result.

    Riguardo al numero di righe sono db piccoli, non prevedo problemi di sorta, che nascono quando le tabelle temporanee NON riescono a risiedere in RAM

    Ho appena fatto un test sulla mia macchina con due tabelle da 10 milioni di righe e una union di 2 campi di 200 caratteri con ordinamento: ha richiesto 5 secondi.

    EDIT: se sono interrogazioni frequenti ti potrebbe convenire fare (lato applicazione o db con trigger) una "tabellona" nella quale inserisci man mano tutte le righe delle altre tabelle, mettendoci un indice sul campo che vuoi usare per ordinare.

    Se le righe aggiunte son relativamente poche/ms probabilmente avresti query più veloci e, in questo caso, addirittura ti converrebbe usare myisam per la capacità di "appendere-in-coda" con minor overhead

  8. #8
    Ok grazie vedrò di cavarmela con questo tipo di dritta. Il cast non credo sarà necessario.

    ps bravo i 6 milioni sono indirizzi topografici di utenze :-)

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da TrueLies
    Ok grazie vedrò di cavarmela con questo tipo di dritta. Il cast non credo sarà necessario.

    ps bravo i 6 milioni sono indirizzi topografici di utenze :-)
    resta la "vera" domanda: lo scopo di tutto ciò?

    te lo chiedo perchè è sempre meglio usare il "fosforo" piuttosto che "i muscoli" quando si usano i db.

    è facile pensare che "magicamente" mysql farà chissa che, ma in certi casi è decisamente "stupido"

  10. #10
    Gli utenti hanno diversi indirizzi - ufficio, casa, ufficio2, magazzino, eccetera: potrebbero averne uno solo o tutti e quattro o solo 2 o solo 3.

    Ognuno di loro apre delle pratiche

    Devo avere da 6 tabelle diverse (pratiche, beni mobili e immobili (comprati e venduti), liti legali, clienti acquisiti, login nel database, viaggi effettuati) una panoramica ordinata semplicemente per data di tutta la movimentazione - insomma serve ad un colpo d'occhio sapere cosa si è movimentato per data, e inoltre serve vedere se le date dichiarate nei cambiamenti di indirizzi coincidono con quelle delle azioni effettuate nelle altre 6 tabelle.

    A tal scopo serve solo il colpo d'occhio (la verifica deve essere fatta da esseri umani, de visu diciamo), ma per ottenrelo serve sapere come con dati così etereogenei poter ottenere i record delle varie tabelle mescolati ma ordinati per data.
    Purtroppo trovo tutti campi data con nomi diversi, e indici diversi. per fortuna sono indicizzati però

    La mia idea era di sapere come si fa con 2 tabelle per poi sperare di cavarmela con il resto (sono uno abituato a lavorare da sè, ma ogni tanto un buon consiglio me serve pure a me!)

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.