Visualizzazione risultati 1 fino 13 di 13

Discussione: ORDER BY e UNION

  1. #1
    Guest

    Predefinito ORDER BY e UNION

    Ciao a tutti, ho un problema nell'ordinare una query ottenuta dall'UNION di due select.

    Il codice della query è il seguente:
    Codice PHP:
    "SELECT tab1.id_title FROM tab1 WHERE (tab1.id_user = '$my_id' AND (tab1.type = 'post' OR tab1.type = 'comment')) UNION SELECT tab1.id_title FROM tab1 INNER JOIN tab2 ON tab2.id_friend = tab1.id_user WHERE (tab1.type = 'post' AND tab2.id_user = '$my_id')";
    Dato che io scarico sempre id_title dalla tabella tab1 vorrei poter ordinare i risultati secondo tab1.time.

    Ho provato con diverse soluzioni trovate su internet ma ricevo sempre strani errori tipo "la colonna non esiste".
    Sapete aiutermi?

  2. #2
    Guest

    Predefinito

    Potresti iniziare col fornire dei punti fermi.

    Al posto di dire strani errori tipo ...
    potresti dire

    Se eseguo la query X ottengo l'errore Y mentre se eseguo la query Y ottengo l'errore Z ...

  3. #3
    Guest

    Predefinito

    Non ho salvato tutti i tentativi che ho fatto, ti posso dire l'ultimo:

    Ho inserito l'ordinamento (ORDER BY ....) alla fine di ogni select, l'errore è stato "Incorrect usage of UNION and ORDER BY".

    Non esiste una guida che spieghi chiaramente come si ordinano i risultati in un union?

  4. #4
    Guest

    Predefinito

    Quello che ottieni con UNION è un unico recordset, quindi ORDER BY va inserito alla fine ed ha effetto su tutto.

    Codice:
    SELECT a, b, c
    FROM tab1
    
    UNION
    
    SELECT a, b, c
    FROM tab2
    
    ORDER BY a
    va bene, mentre non va bene

    Codice:
    SELECT a, b, c
    FROM tab1
    ORDER BY a
    
    UNION
    
    SELECT a, b, c
    FROM tab2
    
    ORDER BY a


    Per usare una colonna quale campo di ordinamento, questa deve essere compresa nella SELECT

    Per cui va bene

    Codice:
    SELECT a, b FROM tabella ORDER BY b
    ma non va bene

    Codice:
    SELECT a FROM tabella ORDER BY b

  5. #5
    Guest

    Predefinito

    Ho eseguito alla lettera le tue istruzioni, mi visualizza questo errore:

    Unknown column tab1.time' in 'order clause'.

    (la colonna invece esiste)

  6. #6
    Guest

    Predefinito

    Citazione Originalmente inviato da nextonext Visualizza messaggio
    Ho eseguito alla lettera le tue istruzioni, mi visualizza questo errore:

    Unknown column tab1.time' in 'order clause'.

    (la colonna invece esiste)
    Ma tab1.time l'hai messo nel SELECT?

    Codice:
    SELECT tab1.time, ...
    ...
    ORDER BY tab1.time

  7. #7
    Guest

    Predefinito

    Si, in entrambi i select

  8. #8
    Guest

    Predefinito

    Fai un'altra prova, esegui le due query separatamente e vedi come va

    Fai pure un DESCRIBE tab1, tanto per essere sicuri della struttura della tabella ...
    Ultima modifica di simpleticket : 10-09-2011 alle ore 09.02.49

  9. #9
    Guest

    Predefinito

    Ok ho provato tutto, i due select separati non mi danno errori, come la query union senza ORDER BY.

    Invece non conosco la funziona DESCRIBE, come si usa?

  10. #10
    Guest

    Predefinito

    così come l'ho scritta. Restituisce la struttura della tabella.

    mmmm...
    se le due query non danno errore ...

    posti la query completa che esegui?

  11. #11
    Guest

    Predefinito

    Codice PHP:
    "SELECT tab1.id_title, tab1.type, tab1.time FROM tab1 WHERE (tab1.id_user = '$my_id' AND (tab1.type = 'post' OR tab1.type = 'comment')) UNION SELECT tab1.id_title, tab1.type, tab1.time FROM tab1 INNER JOIN tab2 ON tab2.id_friend = tab1.id_user WHERE (tab1.type = 'post' AND tab2.id_user = '$my_id') ORDER BY tab1.time"
    Cercando su internet ho trovato un post con una soluzione alternativa, ovvero:

    (SELECT ........ ) UNION (SELECT ....... ) ORDER BY......

    Ho provato ad eseguire questa query, risultato:
    Table 'tab1' from one of the SELECTs cannot be used in global ORDER clause
    Il problema non può essere collegato al join?


    Ho fatto un'altra prova:

    SELECT tab1.id_title, tab1.type, tab1.time FORM (SELECT ........ UNION SELECT ....... ) ORDER BY......
    Ora mi stampa questo errore:
    Every derived table must have its own alias

    Sto diventando pazzo
    Ultima modifica di nextonext : 10-09-2011 alle ore 09.44.02

  12. #12
    Guest

    Predefinito

    Prova così

    Codice PHP:
    "SELECT tab1.id_title AS id_title, tab1.type AS type, tab1.time AS time FROM tab1 WHERE tab1.id_user = '$my_id' AND (tab1.type = 'post' OR tab1.type = 'comment') UNION SELECT tab1.id_title AS id_title, tab1.type AS type, tab1.time AS time FROM tab1 INNER JOIN tab2 ON tab2.id_friend = tab1.id_user WHERE tab1.type = 'post' AND tab2.id_user = '$my_id' ORDER BY time";

  13. #13
    Guest

    Predefinito

    FUNZIONA!!!!

    Grazie mille!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •