MySQL Limit in MS SQL

Συζητήσεις για τον Microsoft SQL Server

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

MySQL Limit in MS SQL

Δημοσίευση από cherouvim » 21 Οκτ 2005 06:47

Me ekpliksi anakalypsa oti i MS SQL den anagnorizei tin entoli LIMIT sto query tis. Pos lynete to problima? (To sketo TOP den me kalyptei, kai thelo na apofygo tin tehniki tis aferesis tou TOP x ASC kai TOP y DESC tou table apo to SELECT * tou table)

Άβαταρ μέλους
shadow
Script Master
Δημοσιεύσεις: 606
Εγγραφή: 14 Απρ 2005 18:30

MySQL Limit in MS SQL

Δημοσίευση από shadow » 21 Οκτ 2005 09:52

χαχα και εγώ το ίδιο σοκ είχα πάθει όταν το είχα δει :)
Η λύση η οποία σκέφτηκα εγώ και δουλεύει είναι η εξής:
Σε κάθε σελίδα αποτελεσμάτων θα υπάρχει ένα μέγιστο id, εφόσον τα δεδομένα θα είναι σορταρισμένα. Το πρόβλημα είναι ότι δεν θέλω να εμφανίζονται όλα τα δεδομένα σε μια σελίδα αλλά να υπάρχει navigation bar (κλασσικό πρόβλημα pagination). Αρα αυτό το οποίο κάνω είναι όταν βρίσκομαι π.χ. στην σελίδα 3 να βρίσκω ποιο ειναι το μεγιστο id της σελίδας 2 , και στο query που θα εκτελέσω να βάζω ως συνθήκη το id των δεδομένων να είναι μεγαλύτερο από το max id της σελίδας 2. Και με μια TOP $max_on_page, παίρνω από τα δεδομένα που ικανοποιούν την παραπάνω συνθήκη τα δεδομένα που θέλω...

Κώδικας: Επιλογή όλων

function returnResult($catQuery , $Top=""){
                global $viewTitles , $connection, $max_on_page;
                if(empty($Top)){ //ευρεση των #αποτελεσμάτων για να δω εαν χρειάζεται pagination
                        $query = "SELECT COUNT(*) FROM $viewTitles WHERE ( $catQuery ) AND ($filters1 AND $filters2)";
                        $result = mssql_query($query , $connection);
                }
                else{ //χρειαζομαι pagination
                        if($Top>1){$cond="max"; $internal = ($Top-1)*$max_on_page;} //ευρεση του μεγιστου id της προηγούμενης σελίδας
                        else{$cond="min"; $internal = $Top*$max_on_page;} //εισαι στην πρώτη σελιδα οποτε ουσιαστικα γινεται ενα top με order desc

                        $query = "select $cond (t.TitlesID) from (select top $internal TitlesID from $viewTitles ORDER BY TitlesID) t";
                        $result = mssql_query($query, $connection);
                        $row = mssql_fetch_array($result);
                        $maxID = $row[0]; //αυτο ειναι το max id της προηγούμενης σελίδας
			//εφοσον γνωρίζω το max id της προηγούμενης σελίδας , ζητώ τα δεδομενα που έχουν id μεγαλύτερο από το προηγούμενο max id
                        $query = "SELECT TOP $max_on_page * FROM $viewTitles WHERE TitlesID>".$maxID."  ORDER BY TitlesID";
                        $result = mssql_query($query , $connection);
                }
                return $result;
}
Close your eyes
For your eyes will only tell the truth and the truth isnt what you want to see
In the dark, is it easy to pretend that the truth is it ought to be.
Programmers are programmers because they like to code

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

MySQL Limit in MS SQL

Δημοσίευση από cherouvim » 22 Οκτ 2005 10:42

Einai mia kali lysi i opoia exei ton periorismo oti to TitlesID prepei na einai panta me ASC order. Dystihos thelo na ylopoihso to LIMIT (gia pagination opos kai esy to itheles) se selida opou o hristis mporei me click se kathe field title tou table na sortarei ana field ASC i DESC. Opote einai poly efkolo na 'spasei' to pagination me tin parapano tehniki.

Telika tha paikso me tis afereseis ton ASC TOP kai DESC TOP apo to original table.
Thanks a lot.

Άβαταρ μέλους
shadow
Script Master
Δημοσιεύσεις: 606
Εγγραφή: 14 Απρ 2005 18:30

MySQL Limit in MS SQL

Δημοσίευση από shadow » 22 Οκτ 2005 12:34

cherouvim έγραψε:Einai mia kali lysi i opoia exei ton periorismo oti to TitlesID prepei na einai panta me ASC order.
Οχι απαραίτητα , και υπάρχουν διάφορες λύσεις στην προσέγγιση που είπα. πχ εαν θες desc order μπορείς την συνάρτηση returnResult να την καλείς με την $TOP να παίρνει αύξουσες τιμές (δηλαδή 1,2,3,..., $LAST_PAGE) ενώ όταν θέλεις ASC ORDER την καλείς με την TOP να παίρνει φθίνουσες τιμές ($LAST_PAGE, $LAST_PAGE-1, ..., 1)
cherouvim έγραψε: Dystihos thelo na ylopoihso to LIMIT (gia pagination opos kai esy to itheles) se selida opou o hristis mporei me click se kathe field title tou table na sortarei ana field ASC i DESC. Opote einai poly efkolo na 'spasei' to pagination me tin parapano tehniki.
xmmm, εδώ έχεις δίκιο και μια λύση ολίγον τι μπακάλικη είναι να παίρνεις τα αποτέλεσματα σου με το order που θες και μετά να μετακινείς αναλόγως με την σελίδα που είσαι τον pointer στο result στη σωστή θέση

Κώδικας: Επιλογή όλων

mssql_data_seek ($result, $move);
Close your eyes
For your eyes will only tell the truth and the truth isnt what you want to see
In the dark, is it easy to pretend that the truth is it ought to be.
Programmers are programmers because they like to code

raul_
Δημοσιεύσεις: 3
Εγγραφή: 21 Μάιος 2006 14:11

MySQL Limit in MS SQL

Δημοσίευση από raul_ » 21 Μάιος 2006 14:19

You can also, take a look at my project: RC4PHP ;)

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

MySQL Limit in MS SQL

Δημοσίευση από cherouvim » 21 Μάιος 2006 15:14

Is it an object relational mapping tool, or it just abstracts the sql?

How do you implement pagination/scrollable resultsets?

thanks

raul_
Δημοσιεύσεις: 3
Εγγραφή: 21 Μάιος 2006 14:11

MySQL Limit in MS SQL

Δημοσίευση από raul_ » 27 Μάιος 2006 00:54

I do not want to be myself bad interpreted; just give it a try and you'll see for yourself!!! ;)
RC4PHP.SourceForge.net
The pagination is what I'm proud of most!!!! :D
If you are interested of it, u can contact me through mail! ;)

raul_
Δημοσιεύσεις: 3
Εγγραφή: 21 Μάιος 2006 14:11

MySQL Limit in MS SQL

Δημοσίευση από raul_ » 08 Ιουν 2006 22:05

I'm just curios.... was it helpful a little for what you need ? :roll:

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

MySQL Limit in MS SQL

Δημοσίευση από cherouvim » 26 Ιούλ 2007 00:13

Ντροπή και αίσχος.
Μερικοί το κάνουν με server side cursors.
Καμία άλλη, query based λύση κανείς;

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

MySQL Limit in MS SQL

Δημοσίευση από skeftomilos » 26 Ιούλ 2007 05:27

Μεγάλη αμαρτία οι κέρσορες.

Κώδικας: Επιλογή όλων

string query = "SELECT TOP " + recordsCount + " * FROM Projects\n" +
               "WHERE prj_id NOT IN (\n" +
               "  SELECT TOP " + fromIndex + " prj_id FROM Projects\n" +
               "  WHERE prj_date BETWEEN @DateFrom AND @DateTo\n" +
               "  ORDER BY prj_date DESC\n" +
               ")\n" +
               "AND prj_date BETWEEN @DateFrom AND @DateTo\n" +
               "ORDER BY prj_date DESC\n";
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Απάντηση

Επιστροφή στο “MS SQL Server”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες