24. februar 2010 - 23:10
Der er
5 kommentarer og 1 løsning
Find alle records i forespørgsel (mySql + limit + FOUND_ROWS)?
Kære alle, Jeg har en lettere bøvlet problemstilling, som jeg har forsøgt at løse i en del tid nu.. Jeg skal lave en slags paginering - og begrænser derfor udtrækket med LIMIT og viser de næste rækker med offset (eller LIMIT 10, 0) Problemet er nu, at jeg gerne vil vide hvor mange rækker der i virkeligheden findes indenfor forespørgslen. Sql = "SELECT city_name, city_dist AS distance FROM cities HAVING distance < 30 ORDER BY distance LIMIT 10 OFFSET 0" Jeg har set i mySql´s dokumentation, at der findes en funktion der hedder FOUND_ROWS(). Er der nogen meget kloge hoveder, der kan give et eksempel på brugen af det med understående kode? På forhånd tak tak tak! SQLserveradr = "..." SQLdatabase = "..." SQLlogin = "..." SQLpassword = "..." '-- Create connection Set Conn = Server.CreateObject("ADODB.Connection") conStr = "driver={MySql};server=" & SQLserveradr & ";database=" & SQLdatabase & ";uid=" & SQLlogin & ";pwd=" & SQLpassword & ";" Conn.Open conStr Sql = "SELECT city_name, city_dist AS distance FROM cities HAVING distance < 30 ORDER BY distance LIMIT 10 OFFSET 0" Set Record = Conn.Execute(Sql) If Record.EOF Then '-- Found nothing Response.Write("<pre>No records found..</pre>") Else Do While Not Record.EOF .... Record.MoveNext Loop End If '-- Clean object Record.Close Set Record = Nothing '-- Close connection Conn.Close Set Conn = Nothing
Annonceindlæg fra Infor
25. februar 2010 - 01:22
#1
Nu kender jeg ikke lige FOUND_ROWS(), men SELECT COUNT(*) FROM cities WHERE distance < 30 skulle gerne gi' dig det samlede antal rows
25. februar 2010 - 02:07
#2
Nåh, læste lidt i docs, Sql = "SELECT SQL_CALC_FOUND_ROWS city_name, city_dist AS distance FROM cities HAVING distance < 30 ORDER BY distance LIMIT 10 OFFSET 0" rowsialt = "SELECT FOUND_ROWS()" Du afvikler første sql, og med den næste får du antal af rows ialt
25. februar 2010 - 11:19
#3
Hej Steffen, Tak fordi du gider :) Jeg har naturligvis været inde ovre count, men grundet min LIMIT, så kan den ikke bruges :) Jeg kan simpelthen ikke få det til at fungere - måske er jeg helt hen i vejret mht. syntaks. Kan du eventuelt give et kraftigt vink med en vognstang? Forsøg 1: '-- Execute Sql = "SELECT SQL_CALC_FOUND_ROWS city_name, city_dist AS distance FROM cities HAVING distance < 30 ORDER BY distance LIMIT 10 OFFSET 0" Set Record = Conn.Execute(Sql) rowsialt = "SELECT FOUND_ROWS()" Udskriver jo bare "SELECT FOUND_ROWS()". Forsøg 2: '-- Execute Sql = "SELECT SQL_CALC_FOUND_ROWS city_name, city_dist AS distance FROM cities HAVING distance < 30 ORDER BY distance LIMIT 10 OFFSET 0" Set Record = Conn.Execute(Sql) Set rowsialt = Conn.Execute("SELECT FOUND_ROWS()") Giver en fejl på variabel navnet
25. februar 2010 - 15:39
#4
Øhh, nu er jeg til php. Og flg. virker fint for mig: $sql = "SELECT SQL_CALC_FOUND_ROWS varenavn, varepris FROM tabel ORDER BY varenavn ASC LIMIT 3"; $sqlrows = mysql_query($sql) or die (mysql_error()); echo mysql_num_rows($sqlrows); $sqltotal = "SELECT FOUND_ROWS()"; $rowstotal = mysql_query($sqltotal) or die (mysql_error()); echo"<p>Rows i tabel: ".mysql_result($rowstotal,0); Men du burde jo kunne lave en COUNT() som det første, UDEN brug af LIMIT, og på den måde få samlet antal rows.
27. februar 2010 - 04:39
#5
Hej Steffen, Tusinde tak for dine svar.. Jeg er en spadser til at gætte "ny" syntaks - jeg fandt dog ud af det på din foranledning.. Du må meget gerne lægge et svar - og tak for tiden / hjælpen! Løsning: Sql = "SELECT city_name, city_dist AS distance FROM cities HAVING distance < 30 ORDER BY distance LIMIT 10 OFFSET 0" Set Record = Conn.Execute(Sql) If Record.EOF Then '-- Found nothing Response.Write("<pre>No records found..</pre>") Else Do While Not Record.EOF .... Record.MoveNext Loop End If '-- Clean object Record.Close Set Record = Nothing '-- Get all objects within query without limit Set AllFound = Conn.Execute("SELECT FOUND_ROWS()") Response.Write("<pre>All found -> " & AllFound(0) & "</pre>") '-- Close all AllFound.Close Set AllFound = Nothing '-- Close connection Conn.Close Set Conn = Nothing
27. februar 2010 - 09:30
#6
Godt du fandt ud af det :O)
Kurser inden for grundlæggende programmering