Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    query con sottoquery=campo per ordinamento dati, possibile?

    Salve a tutti,

    è una settimana che lavoro su questa query e non riesco a risolvere questo piccolo baco

    ho una tabella strutture (che poi sono appartamenti) classica con: id, nome, desc, ecc...

    e una tabella coi prezzi CostiXStruttureTable con: idstruttura, idperiodo, costo

    la query che utilizzo per caricare gli appartamenti è:

    codice:
    Function Query_Strutture(Id, ordinamento)
    Query_Strutture =
    "SELECT "_ &"StruttureTable.Id, "_ 
    &"StruttureTable.codice, "_ 
    &"StruttureTable.affittovendita, "_ 
    ...... altri mille campi che non vi riporto)..... 
    &"StruttureTable.titoloESP, "_ 
    &"StruttureTable.descrizioneESP, "_ 
    &"StruttureTable.Foto, "_ 
    &"(SELECT MIN(costo) FROM CostiXStruttureTable WHERE CostiXStruttureTable.IdStruttura=StruttureTable.id) AS CostoMinStruttura "_ 
    &"FROM StruttureTable "_ &"LEFT OUTER JOIN PrenotazioniTable ON PrenotazioniTable.idstruttura=StruttureTable.id "_ 
    &"WHERE StruttureTable.Id>0 " ' solo per avere una where fissa' if Id<>0 then 
    Query_Strutture = Query_Strutture & " AND StruttureTable.Id=" & Id 
    if Ordinamento=1 then 
    Query_Strutture = Query_Strutture & " ORDER BY 25" 
    elseif Ordinamento=2 then 
    Query_Strutture = Query_Strutture & " ORDER BY 25 DESC" 
    else 
    Query_Strutture = Query_Strutture & " 
    ORDER BY lastminute=1, StruttureTable.codice" end if
    End Function
    ora la query non da errore, ma non ordina correttamente gli appartamenti per prezzo (crescente=1 o decrescente=2)

    e se sostituisco 25 con CostoMinStruttura mi da errore sulla riga dove eseguo la funzione: Query_Strutture per eseguire la query

    Microsoft OLE DB Provider for ODBC Drivers error '80040e10'
    [Microsoft][Driver ODBC Microsoft Access] Parametri insufficienti. Previsto 1.
    /isolarossa.biz/strutture.asp, riga 113


    come risolvere?

  2. #2
    ORDER BY 25 vuol dire "ordina per il 25esimo campo che ho messo nella SELECT"... ora, se dici che la query non dà errore vuol dire che ci sono almeno 25 campi... se dici che non ordina come speri tu, vuol dire che hai contato male e il campo che ti serve non è il 25esimo... ma scusa, perché fai così??

    Metti il nome del campo. Dici che la query ti dà errore, ok... ma tu fai un
    Response.Write(QueryStrutture)
    (spero di ricordarmi vbscript, non lo uso da tanti anni) e scrivi qui il risultato... perché a leggere quello che ci hai postato mi vanno insieme gli occhi
    STK/Unit: Unit Test framework per MariaDB
    http://stk.wikidot.com/stk-unit

  3. #3
    è anche possibile che la 25a colonna sia una stringa, per cui ... ORDER BY 25 DESC ... metterà 200 prima di 1000

  4. #4
    25 corrisponde a: &"(SELECT MIN(costo) FROM CostiXStruttureTable WHERE CostiXStruttureTable.IdStruttura=StruttureTable.id ) AS CostoMinStruttura "_


    ho contato più e più volte partendo da 0 è sono sicuro che è 25 (nell'editor ho anche messo i numero per ogni riga quindi non posso sbagliarmi)

    non essendo un vero e proprio campo ma una sottoquery gli attribuisco un nome AS CostoMinStruttura

    non capisco però perché se uso CostoMinStruttura mi dia errore (forse perché non p un effettivo campo della tabella?)

    SELECT StruttureTable.Id, StruttureTable.codice, StruttureTable.affittovendita, StruttureTable.visibilehome, StruttureTable.idtipologia, StruttureTable.numPersone, StruttureTable.idzona, StruttureTable.lastminute, StruttureTable.DataInizioLastMinute, StruttureTable.DataFineLastMinute, StruttureTable.FormulaRoulette, StruttureTable.GoogleMapAssociata, StruttureTable.titoloITA, StruttureTable.descrizioneITA, StruttureTable.titoloENG, StruttureTable.descrizioneENG, StruttureTable.titoloDEU, StruttureTable.descrizioneDEU, StruttureTable.titoloRUS, StruttureTable.descrizioneRUS, StruttureTable.titoloFRA, StruttureTable.descrizioneFRA, StruttureTable.titoloESP, StruttureTable.descrizioneESP, StruttureTable.Foto, (SELECT MIN(costo) FROM CostiXStruttureTable WHERE CostiXStruttureTable.IdStruttura=StruttureTable.id ) AS CostoMinStruttura FROM StruttureTable LEFT OUTER JOIN PrenotazioniTable ON PrenotazioniTable.idstruttura=StruttureTable.id WHERE StruttureTable.Id>0 AND StruttureTable.idzona=1 ORDER BY 25

  5. #5
    sì, il motivo è quello; dovresti ripetere tutta quello che metti fra parentesi, ma sarebbe un lavoraccio.

    per l'ordine sbagliato, puoi postare un esempio?

  6. #6

  7. #7
    visto, ma quale sarebbe il problema?

  8. #8
    che non li ordina per prezzo
    http://www.scienzemotorie2.it

  9. #9
    Originariamente inviato da steelkeeper
    ho contato più e più volte partendo da 0 è sono sicuro che è 25 (nell'editor ho anche messo i numero per ogni riga quindi non posso sbagliarmi)
    il mio access parte da 1. sicuro che ... ORDER BY 0 ordini per Strutture.TableId???

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.