Сортирането ми нещо се омаза..

webdeveloper

Registered
Здравейте, имам заявка от типа:

HTML:
$sql = "SELECT * FROM `table` ORDER BY `$by` DESC LIMIT 40";

В $by се съдържа съответната таблица, а в тази таблица има записани само цифри. Проблема е, че сортирането изобщо не е както трябва и вместо да сортира от по-голямото число към по-малкото, всичките резултати са в пълна анархия... Полетата ми са с INT кодировка и нещо не мога да схвана от къде идва проблема..
 
*Обновена
Бях допуснал грешка в поста от по-рано.

HTML:
$sql = "SELECT * FROM `table` ORDER BY `$by` DESC LIMIT 40";

Защото ORDER BY ги подрежда по азбучен рен, а не по номера.
Въпреки, че пращаш число sql го приема за буква.

За да подредиш по номера, трябва да кажеш, че променливата, която пращаш е число.

Пробвай примено това

HTML:
$sql = "SELECT * FROM `table` ORDER BY " . $by . " DESC LIMIT 40";

или


HTML:
$sql = "SELECT * FROM `table` ORDER BY ABS($by) DESC LIMIT 40";

Нещо такова си мисля, че трябва да свърши работа ;)

Сега прочетох проблема ти отново и мисля, че sql не ти чете променливата правилно.

Пробвай този начан:

HTML:
$sql = "SELECT * FROM 'table' ORDER BY '{$by}' DESC LIMIT 40";

Ако и това не стане :D ще трябва и аз да пробвам практически :)
 
Извади ги в някакъв ред (няма значение какъв) и си го подреди с PHP.

http://php.net/manual/en/array.sorting.php, като слагаш флаг SORT_NUMERIC.

Примерно от високо към ниско за числа чрез ключа от масива.(ksort e чрез стойността)

$array = array(
1 => 'value1',
5 => 'value2',
3 => 'value3',
);

krsort($array, SORT_NUMERIC);
 
bytheway пробвах всякак, неще и неще... Странното е, че имам още няколко страници със подобен код и таблици и там няма проблем със сортирането... Тука защо така се закучи не знам...

Първия резултат излиза точно както трябва, а останалите са в анархия...
 
Сега пробвах да направя и аз набързо един тест.

Направих таблица с 5 колони и във всяка колона има по 5 реда.
Това е таблицата:

4115.png


Когато искам да видя резултатите от field_1 например пиша този код:

PHP:
<?php
	$connection = mysql_connect('localhost' , 'root', '');
	
	if (!$connection) {
		die("Connection failed: " . mysql_error());
	}
	
	$db_select = mysql_select_db('test_sort', $connection);
	if (!$db_select) {
		die("Database selection failed: " . mysql_error());
	}
	
	$by = "field_1";
?>
<html>
<head><title>Sorting test</title></head>
<body>
<?php
	$query = "SELECT * FROM table_sort ORDER BY " . $by ." ASC LIMIT 5";
	
	$result = mysql_query($query, $connection);
	
	while ($listResult = mysql_fetch_array($result)) {
		echo $listResult['field_1'] . "<br />";
	}
?>
</body>
</html>


И получавам резултат, числата във възходящ ред - 1,2,8,12,45
Ако ги искам в обратен ред пиша :

PHP:
$query = "SELECT * FROM table_sort ORDER BY " . $by ." DESC LIMIT 5";

И получавам числата в обратен ред - 45, 12, 8, 2, 1

Ако искаш да сортираш числата от field_1, обаче показваш числата от field_2, те няма как да са подредени, защото ги показваш в зависимост от подредбата на field_1 (възходящо или низходящо)

Много сложен проблем с това подреждане :D
 
webdeveloper каза:
Здравейте, имам заявка от типа:

HTML:
$sql = "SELECT * FROM `table` ORDER BY `$by` DESC LIMIT 40";

В $by се съдържа съответната таблица, а в тази таблица има записани само цифри. .......

$by трябва да е името на колоната, а не на таблицата.
 
Грешка, имах в предвид колоната. С полето id, проблем няма. Обаче с другите 2 в които също има записани разни цифри неще...
 
Странно защо, но само в този файл сортирането нещо не се получава, а не виждам разлика в кодовете между този и другите файлове...

PHP:
$pp = "25";
$page = (htmlspecialchars(addslashes($_GET['page'])));
$sort = (htmlspecialchars(addslashes($_GET['sort'])));

if ($sort == "download") {$bywe = "down";}
elseif ($sort == "plays") {$bywe = "playwe";}
else {$bywe = "id";}


$limit = ($pp*$page)-$pp;
$redovete = mysql_query("SELECT id FROM `tablicata` WHERE allow='1'");

$maks = mysql_numrows($redovete);
$total = ceil($maks/$pp);


$query = mysql_query("SELECT * FROM `tablicata` WHERE allow='1' ORDER BY `$bywe` DESC LIMIT $limit,$pp");

Вие виждате ли грешка някъде...?
 

Back
Горе