Kak stava tova?

8 отговора 423 прегледа
#1

Kak stava tova?

Zdraveite:-)
Imam slednia vapros. Imam tablica v, koyato imam 20 zapisa.Iskam da gi izvleka ot bazata danni po 5 broq. Sled izvlichaneto na parvite 5 zapisa da mi se poyavyva vazmojnost za izbor i na sledvastite zapisi(Nesto podobno na tova v tozi forum).
Predvaritelno blagodarya za pomosta.

Отговор
в отговор на bob4o #2

Re: Kak stava tova?

mi tva si zavisi ot bozata danni.
naprimer ako si s mysql moje d apolzvash LIMIT
select * from tablename limit 5

Отговор
в отговор на newbie #3

Re: Kak stava tova?

select * from tblname limit 0,5;
select * from tblname limit 5,5;
select * from tblname limit 10,5;
select * from tblname limit 15,5;

kydeto 0,5,10,15 sa ti start positions.
t.e. ot koj zapis natatyka da ti izkara rezultatite

a 5 ti e broq rezultati, koito da ti pokaje ot tozi zapis natatyka.

Отговор
в отговор на newbie #4

Re: Kak stava tova?

Tova e yasno, che stava taka.Problema e v tova, che kato tragna da vikam sledvastite 5 zapisa, otmestvaneto koeto sam zadal me vrasta pak na parvite 5 zapisa, a ne na sledvastite 5, t.e select * from tablename limit $offset,$limit , kadeto za $offset=0 ,a $limit=5
Sled kato tragna da izvlicham sledvastite 5 zapisa se vrastam otnovo na parvite 5, kato opitite mi da uvelicha $offset s 5 edinica za momenta se okazvat neuspeshni:-(

Отговор
в отговор на bob4o #5

Re: Kak stava tova?

ami.. ne znam kak go pravish
no $offset+5;
bi trqbvalo da ti svyrshi rabota..
vij da ne bi da go pravish vyv funkciq.. i $offset ne ti e global..
ili vij dali izobshto go predavash ot predishnata stranica.

ako paste-nesh malko ot koda moje bi shte uspeem da ti pomognem.. na sliapo e trudno.. priznavam :)

Отговор
в отговор на dune2 #6

Eto go koda:-)

Eto go koda s malki oryazvania.
<?php

$limit=5;
$offset=0;


$query = "SELECT * from table_name LIMIT $offset,$limit" ;
$count_row="SELECT count(*) FROM table_name";


if(!($result=mysql_db_query($DB, $count_row)))
{
DisplayErrMsg(sprintf("internal error %d : %s\n", mysql_errno(), mysql_error()));
exit();
}
list($total_rows) = mysql_fetch_array($result);

if ($offset > 0)
{
print "<a href=\"proba.php?offset=".($offset-$limit)."\">Previous Entries</a> ";
}
if ($offset+$limit < $total_rows)
{
print "<a href=\"proba.php?offset=".($offset+$limit)."&limit=".($limit+5)."\">Next Entries</a>";
}

?>

Приятелчета сте вие...
Отговор
в отговор на An1lD #7

Re: Eto go koda:-)

if((int)$limit="") $limit=0;

ili oshte po dobre

function is_valid_limit($limit) { return ($limit>=0 && $limit<=5); }

if(is_valid_limit($limit)) $limit=0;

zashtoto ti taka na vsqko izvikvane na fail-a slagash tvyrdi stoinosti na limit i offset

bofh
Отговор
в отговор на bob4o #8

Re: Kak stava tova - спомени от бъдещето?

Или как се прави "това" с MySQL 4.x

SELECT SQL_CALC_FOUND_ROWS <нещо си> FROM <и така нататък> LIMIT 0, $rows;

SELECT FOUND_ROWS();

Взимаш резултата и го използваш по-нататък. Съдържа общия брой т.е. без LIMIT

Правиш го само "първия път", по-нататък както и във всички други примери използваш

SELECT .... LIMIT $offset, $rows;

Нещо в стил:

<?
...

if (!isset($found_rows))
{
/* Първо изпълнение на заявката. */

/* Предполагайки, че искаш първия път да започнеш от 0*/
$offset = 0;

$res = mysql_query("SELECT SQL_CALC_FOUND_ROWS .... LIMIT $offset, $rows");

$res2 = mysql_query("SELECT FOUND_ROWS()");
$found_rows = ....;

...
}
else
{
/* Всяко следващо изпълнение.
Вкл. ако е от <<Prev N и стигнеш до 0,N !!!
*/
$res = mysql_query("SELECT .... LIMIT $offset, $rows");

...
}


?>


MySQL 4.0.1 официално е alpha версия, т.е. в процес на разработка. Иначе работи доста стабилно, а и има някои друге нещица дето ускоряват значително работата на моменти но -alpha така или иначе означава - пробвай на своя отговорност

Linux is like a wigwam - No Windows, No Gates, Apache inside

Редактирано от salle на

Отговор
в отговор на bofh #9

10x:-)

Blagodarya za pomosta:-))

Отговор