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

    Query PHP/MSSQL non eseguita se uso LIMIT

    Salve,

    sono abbastanza nuova all'uso di PHP su MS SQL e alle le funzioni sqlsrv_... quindi scusate in anticipo se scrivo cavolate!!

    Quello che segue è il codice di test che sto utilizzando per la connessione al db e fare una semplice SELECT (fa l'autenticazione di Windows perché è locale
    codice:
    $connectionInfo = array( "Database"=>"dbtest");
    $conn = sqlsrv_connect( $serverName, $connectionInfo);
    
    if( $conn )
    {
    
    $unaquery = "SELECT * FROM mytable LIMIT 3" ;
    $risultato = sqlsrv_query( $conn, $unaquery) 
    	or die(sqlsrv_errors());
    
    	if ($risultato) {
    		$g = 0;
    		$campo = sqlsrv_field_metadata($risultato) ;
    		$numerocampi = count($campo) - 1 ;
    		$conteggio = sqlsrv_num_rows($risultato) ;
    
           		while ($riga = sqlsrv_fetch_array($risultato)) {
    
    			echo $riga['myID'],' | ',$riga['myField'],'
    '  ;
    
    		} // END while ($riga = sqlsrv_fetch_array($risultato))
    
    	} // END if ($risultato)
    Questo codice non restituisce "niente".

    Se elimino LIMIT tutto funziona brillantemente.

    Dove sbaglio?!!!

  2. #2
    Ciao. A quanto so io il LIMIT è una parola chiave di mysql che non esiste in sql server.
    prova a modificare la tua query in questo modo:

    codice:
    SELECT TOP 3 * FROM mytable

  3. #3
    Ecco svelato l'arcano!!! Infatti funziona senza limit...

    Non riesco a trovare info per fare la stessa cosa con MS SQL...

    Idee?

    Mi aspettano ore di googlaggio??!


    Originariamente inviato da albx87
    Ciao. A quanto so io il LIMIT è una parola chiave di mysql che non esiste in sql server.
    prova a modificare la tua query in questo modo:

    codice:
    SELECT TOP 3 * FROM mytable

  4. #4
    Hai provato ad eseguire la query usando TOP??!! una cosa del tipo:

    SELECT TOP 3 * FROM mytable

    prova a vedere se funziona...

  5. #5
    Sì scusa!! Funzia!!

    Ma TOP non mi risolve il problema però...

    Cioè ovviamente capisco come poterlo aggirare, ma volevo proprio evitare di scrivere linee e linee di codice magari non necessarie...

    Suggerimenti?

    Edit: Mi sono dimenticata di dire che lo scopo era paginazione!!!


    Originariamente inviato da albx87
    Hai provato ad eseguire la query usando TOP??!! una cosa del tipo:

    SELECT TOP 3 * FROM mytable

    prova a vedere se funziona...

  6. #6

    Paginazione PHP, MSSQL SERVER 2008, sqlsrv_query(), etc.

    Ciao di nuovo!!

    Credo di aver trovato la soluzione in quel che segue.

    codice:
    $unaquery = "SELECT * from 
        (select Row_Number() over (order by theID) as RowIndex, * from mytable) as Sub
        Where Sub.RowIndex >= 3 and Sub.RowIndex < 7" ;
    L'ho trovato qui http://varjabedian.net/archive/2008/...rver-2005.aspx e sarebbe per MS SQL SERVER 2005, ma per ora parrebbe funzionare bene anche con 2008

    Non che mi sia tutto chiarissimo vero...

  7. #7

    Re: Paginazione PHP, MSSQL SERVER 2008, sqlsrv_query(), etc.

    In caso alle volte questo post servisse anche ad altri...

    La soluzione che ho menzionato sopra potrebbe essere poco efficiente.

    Ho trovato quest'altra, che pare essere più snella e veloce. L'esempio assume che siate alla pagina 3 e che ogni pagina visualizzi 100 record:
    codice:
    "SELECT top 100 * FROM miatabella WHERE ID NOT IN (SELECT TOP 200 ID FROM miatabella)"




    Originariamente inviato da MrsCassandra
    Ciao di nuovo!!

    Credo di aver trovato la soluzione in quel che segue.

    codice:
    $unaquery = "SELECT * from 
        (select Row_Number() over (order by theID) as RowIndex, * from mytable) as Sub
        Where Sub.RowIndex >= 3 and Sub.RowIndex < 7" ;
    L'ho trovato qui http://varjabedian.net/archive/2008/...rver-2005.aspx e sarebbe per MS SQL SERVER 2005, ma per ora parrebbe funzionare bene anche con 2008

    Non che mi sia tutto chiarissimo vero...

  8. #8
    Mi collego a questo topic per una curiosità.
    Ma quando si usa is limit non si devono indicare 2 valori?

    Es. LIMIT 0,3 (record iniziale, + quantità da selezionare)

  9. #9
    Originariamente inviato da dydale
    Mi collego a questo topic per una curiosità.
    Ma quando si usa is limit non si devono indicare 2 valori?

    Es. LIMIT 0,3 (record iniziale, + quantità da selezionare)
    Si...se però devi tirare fuori i primi n (partendo quindi dall'inizio) valori puoi fare anche una cosa del tipo:
    codice:
    SELECT * FROM tabella LIMIT n
    che ti tira fuori i primi n valori dalla tua tabella. In pratica se il primo valore di LIMIT è 0 lo puoi anche omettere.

    @MrsCassandra...interessante la seconda opzione...grazie perchè può tornarmi utile

  10. #10
    Prego!!!

    È sempre un piacere essere utili!!

    Originariamente inviato da albx87
    @MrsCassandra...interessante la seconda opzione...grazie perchè può tornarmi utile

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.