Mysql COUNT >> LIMIT ?

baceto90

Registered
Как мога с една заявка да напваря така ,че да селектирам от база данни резултати с даден LIMIT , но да изкарва броя на всички редове без да се съобразява с LIMIT ? ( ако е възможно )
 
koko13 каза:
Код:
$start = 0;	
$limit = 10;

SELECT * FROM `table` ORDER BY `id` DESC LIMIT $start, $limit

Дано помогнах :)
Не разбра какво точно поисках. Примерно сега ако искам да изведа броя на редовете в тази даблица колко са ще ми изведе 10. Аз искам да ми изведе реалния резултат без да се съобразява с LIMIT.
 
baceto90 каза:
koko13 каза:
Код:
$start = 0;	
$limit = 10;

SELECT * FROM `table` ORDER BY `id` DESC LIMIT $start, $limit

Дано помогнах :)
Не разбра какво точно поисках. Примерно сега ако искам да изведа броя на редовете в тази даблица колко са ще ми изведе 10. Аз искам да ми изведе реалния резултат без да се съобразява с LIMIT.

Искаш колкото са ти резултатите - толкова да ги покаже ?
 
Бутни в заявката SQL_CALC_FOUND_ROWS (преди другите полета от базата данни), и след заявката можеш да ги вземеш с SELECT FOUND_ROWS()
 
baceto90 каза:
Как мога с една заявка да напваря така ,че да селектирам от база данни резултати с даден LIMIT , но да изкарва броя на всички редове без да се съобразява с LIMIT ? ( ако е възможно )

При така зададен въпрос е нормално човек да се по обърка значи хем даден LIMIT хем без да се съобразява с LIMIT това не мога да го разбера. Или искаш просто да ти изкара всичко

Код:
SELECT * FROM `table` ORDER BY `id` DESC

:?
 
Код:
$qu1 = mysql_query("SELECT * FROM `tablica`")or die(mysql_error());
$num = mysql_num_rows($qu1);
echo 'Всички файлове'.$num;
$qu2 = mysql_query("SELECT * FROM `tablica` LIMIT 10")or die(mysql_error());
 
baceto90 каза:
Как мога с една заявка да напваря така ,че да селектирам от база данни резултати с даден LIMIT , но да изкарва броя на всички редове без да се съобразява с LIMIT ? ( ако е възможно )
Исказъл съм се ясно. Просто е трябвало по-внимателно да вникните в запитването ми.
 
Replace ти е дал интересен отговор, макар и да не съм го пробвал. Стандартно се прави с две заявки - първата брои, втората взима резултатите.

Забелязал съм, че тук във форума често пускате такъв код:

Код:
$qu1 = mysql_query("SELECT * FROM `tablica`")or die(mysql_error());
$num = mysql_num_rows($qu1);
echo 'Всички файлове'.$num;
$qu2 = mysql_query("SELECT * FROM `tablica` LIMIT 10")or die(mysql_error());

Първата заявка - за броя на резултатите. Огромна грешка е да взимаш всичко от съответната таблица, само за да видиш колко реда връща. Трябва да се използва MySQL функцията COUNT()

Код:
$qu1 = mysql_query("SELECT COUNT(*) FROM `tablica`")or die(mysql_error());
$res = mysql_fetch_row($qu1);
$num = $res[0];
echo 'Всички файлове'.$num;
$qu2 = mysql_query("SELECT * FROM `tablica` LIMIT 10")or die(mysql_error());
 
Да преди да пусна темата намерих този метод дето Replace ми предложи , но в повечето мнение където прочетох този метод бил доста бавен , за това не искам да го ползвам и ми беше интересно дали има друг начин с една заявка това да стане. Направих си го по класическия начин с две заявки.
Благодаря на всички ви :)
 
Код:
$q = mysql_query("SELECT * FROM `table` ORDER BY `id` DESC")or die(mysql_error());
$num = mysql_num_rows($q);
echo $num."</br>";
if($num>0)
{
	$i=0;
	while($row = mysql_fetch_array($q)&&$i<10)
	{	
		echo $row['id'].",";
		$i++;
	}
}
 
baceto90 каза:
Да преди да пусна темата намерих този метод дето Replace ми предложи , но в повечето мнение където прочетох този метод бил доста бавен , за това не искам да го ползвам и ми беше интересно дали има друг начин с една заявка това да стане. Направих си го по класическия начин с две заявки.
Благодаря на всички ви :)
А имаш ли си на идея защо е бавен?
Чел си през редовете ми се струва ;)
 
Replace - да не знам защо е бавен, но се доверявам на другите хора. Не съм запознат с това и се отказах да го правя за да не омажа кода. Информативно можеж да споделиш ,защо е по-бавен. Така ще може и другите който не знаят да разберат :)
 
Бавен е именно заради това, че правиш две напълно отделни заявки в една. Нещо като джойн-овете (хипотетично).
Въпреки лимита, MySQL интелигентно минава през всички редове и ги сумира.
Това дали ще направиш две различни заявки, или ще ползваш SQL_CALC_FOUND_ROWS е напълно идентично. (Въпреки, че с една заявка си е много по-интелигентно (според мен)).
SQL_CALC_FOUND_ROWS можеш да го избягваш навсякъде другаде, където не са ти нужни всички резултати.
Като цяло избора си е твой, дали ще напишеш във втория селект
SELECT COUNT(*) FROM table
или
SELECT FOUND_ROWS()
 

Back
Горе