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

    [MySQL] Unione di 2 query non relazionate

    Buongiorno.
    Ho bisogno di unire due query ma fino ad oggi non ci sono mai riuscito.

    MySQL

    Ho un MDB, di articoli giornalistici, con 2 tabelle.
    La tabella 1 contiene articoli di cronaca che chiameremo tabella NEWS
    La tabella 2 contiene articoli di rubrica (sport, moda, cucina, cinema …) che chiameremo tabella RUBRICHE
    Ovviamente le due tabelle non hanno alcuna relazione tra loro. Viaggiano indipendenti.

    Attualmente mostro, in una specie di Home Page, prima 10 NEWS ed a seguire 10 RUBRICHE.
    I dati vengono estratti da due separate query con la condizione che già sono state pubblicate ed ordinate per data di pubblicazione DESC
    Inizialmente le due tabelle avevano delle differenze di campi. Ora, proprio per questo scopo, hanno entrambe gli stessi campi (ovviamente dove non servono rimangono vuoti).
    La query deve caricare tutti i campi (mi servono tutti), quindi “select *from <tabelle> where <campi pubblicato>=true order by <campi data pubblicazione>

    In pratica voglio mostrare i primi 20 articoli (indipendentemente dalla propria natura) in ordine di data di pubblicazione DESC

    Qui di seguito vi mostro le attuali query separate che stanno funzionando bene (da sole)
    codice:
    Tabella NEWS
    SQL1="SELECT * From NEWS where pubblica_dal is not null and pubblica_dal >'' order by CDate(pubblica_dal) DESC"
    Set oDati1 = Server.CreateObject ("ADODB.Recordset")
    oDati1.Open SQL1,oConn,3,3
    codice:
    Tabella RUBRICHE
    SQL2="SELECT * From RUBRICHE where pubblica_dal is not null and pubblica_dal >'' order by CDate(pubblica_dal) DESC"
    Set oDati2 = Server.CreateObject ("ADODB.Recordset")
    oDati2.Open SQL2,oConn,3,3
    Ricordo che è fondamentale mantenere “SELECT * FROM …”

    Successivamente, per sapere da quale tabella previene l’articolo, ho il campo “rubrica” che contiene il nome della rubrica. Nella tabella NEWS, questo campo è presente ma non popolato (sempre vuoto).
    Quindi se è pieno prendo il nome della rubrica e se è vuoto è un articolo di cronaca

    Io ho provato diverse combinazioni di query trovate in rete ma nessuna funziona bene.

    ... dimenticavo : Lavoro in ASP Classic
    Io nella vita ho visto cose che voi astemi neanche potete immaginare.

  2. #2
    1. SELECT * non è una good practice, ma vedi tu
    2. puoi usare UNION, e poi una select esterna --> SELECT * FROM (SELECT * FROM News UNION SELECT * FROM Rubriche) con tutte le where che servono
    3. aggiungi un campo provenienza alla SELECT se vuoi sapere da dove arrivano i record
    4. si può fare tranquillamente con Asp Classic

  3. #3
    dimmi se è teoricamente corretto
    codice:
    "SELECT * FROM (SELECT * From NEWS UNION SELECT * From RUBRICHE) where (NEWS.pubblica_dal is not null and NEWS.pubblica_dal >'') or (RUBRICHE.pubblica_dal is not null and RUBRICHE.pubblica_dal >'') order by CDate(NEWS.pubblica_dal) DESC, CDate(RUBRICHE.pubblica_dal) DESC"
    Ho qualche dubbio sulla where e anche sull'order
    Io nella vita ho visto cose che voi astemi neanche potete immaginare.

  4. #4
    ogni SELECT interna ha la sua WHERE, la ORDER BY mettila su quella esterna

    e poi, un po' di ordine! Come fai a leggere efficacemente lo statement quando è tutto su una riga?

  5. #5
    OK - Appena possibile la testo

    Ora sto risolvendo casini altrui di altro genere
    Io nella vita ho visto cose che voi astemi neanche potete immaginare.

  6. #6
    Ho provato questa soluzione su due ambienti diversi (lavori diversi), uno si è aggiunto proprio oggi.
    Li funziona benissimo la query con where complessa e order multipli.

    Però negli archivi degli articoli non funziona.
    Ho scoperto che questa query mi danneggia un campo memo, che è proprio quello del testo.
    Mi toglie o aggiunge dei div ... non è chiaro ma fa casini.
    Mi scompiglia tutto il layout della pagina.
    Hai conoscenza di problematiche sui campi memo?
    Ultima modifica di SoloWiFi; 17-05-2024 a 22:58
    Io nella vita ho visto cose che voi astemi neanche potete immaginare.

  7. #7
    Mi rispondo da solo:

    UNION tende ad escludere i record duplicati. Per fare questo confronto trasforma i campi memo in Testo di 255 caratteri. Questo per non dover processare tutti i bytes dei corposi campi memo

    Per evitare ciò va usato UNION ALL che ignora i duplicati.
    Io nella vita ho visto cose che voi astemi neanche potete immaginare.

  8. #8
    Quindi tuttapposhto?

    Se sì, pls posta la soluzione, così anche altri ne potranno beneficiare

  9. #9
    io, in genere, non scrivo mai la soluzione completa per evitare i "Geni del Copia/Incolla" che si fanno chiamare Programmatori, senza studiare il perchè delle cose.
    Comunque, visto che me l'hai chiesto, giustamente soddisfo questa piattaforma

    In completezza dell'esempio da me citato, questa è la stringa corretta
    codice:
    Select * From (
        Select * From NEWS where pubblica_dal is not null and pubblica_dal >'' 
            UNION ALL 
        Select * From RUBRICHE where pubblica_dal is not null and pubblica_dal >''
    ) Order by CDate(pubblica_dal) DESC
    
    Ultima modifica di SoloWiFi; 19-05-2024 a 10:31
    Io nella vita ho visto cose che voi astemi neanche potete immaginare.

  10. #10
    Quote Originariamente inviata da SoloWiFi Visualizza il messaggio
    io, in genere, non scrivo mai la soluzione completa per evitare...
    Grazie per la comprensione, com'è umano lei

    A parte gli scherzi, ti sta bene che nel recordset di risulta non venga evidenziato se la riga viene da NEWS o RUBRICA?

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 © 2024 vBulletin Solutions, Inc. All rights reserved.