Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Как вывести последние 10 элементов
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Как вывести последние 10 элементов

Страниц (2): [1] 2 »
 

1. grafillo - 17 Сентября, 2014 - 11:45:38 - перейти к сообщению
Нужно чтобы по порядку выводило последние десять элементов
пишу такой запрос
CODE (SQL):
скопировать код в буфер обмена
  1. mysql_query("SELECT * from tb_private  WHERE  who_user = '$login'  ORDER BY id ASC LIMIT 10 ");

тогда он выводит первые десять элементов из полученного списка, а мне нужно последние, как написать такой запрос?
2. esterio - 17 Сентября, 2014 - 11:59:06 - перейти к сообщению
grafillo пишет:
ORDER BY id DESC
3. grafillo - 17 Сентября, 2014 - 14:02:41 - перейти к сообщению
esterio пишет:
grafillo пишет:
ORDER BY id DESC

тогда он выводит результаты наоборот
4. Tyoma5891 - 17 Сентября, 2014 - 14:07:16 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM tb_private  WHERE  who_user = '$login'  ORDER BY id DESC LIMIT 10
5. DelphinPRO - 17 Сентября, 2014 - 15:47:03 - перейти к сообщению
grafillo пишет:
тогда он выводит результаты наоборот

отсортируйте потом пыхом в обратную сторону, да и всё.
sort и иже с ней
6. grafillo - 17 Сентября, 2014 - 16:27:44 - перейти к сообщению
DelphinPRO пишет:
grafillo пишет:
тогда он выводит результаты наоборот

отсортируйте потом пыхом в обратную сторону, да и всё.
sort и иже с ней


а как будет выглядеть код сортировки по числовой ячейке id?
7. DelphinPRO - 17 Сентября, 2014 - 17:56:28 - перейти к сообщению
как-то так:

PHP:
скопировать код в буфер обмена
  1. // Где-то берем параметры подключения к БД
  2. $config = Registry::getConfig();
  3.  
  4. $host = $config->db['host'];
  5. $user = $config->db['user'];
  6. $pass = $config->db['pass'];
  7. $name = $config->db['name'];
  8.  
  9. // Подключаемся и настраиваемся
  10. $pdo = new \PDO( "mysql:dbname=$name;host=$host", $user, $pass );
  11. $pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
  12. $pdo->query("SET NAMES 'UTF8'");
  13.  
  14. // Дальше по вашему вопросу.
  15. $query = "SELECT *
  16.          FROM tb_private
  17.          WHERE who_user = :login
  18.          ORDER BY id DESC
  19.          LIMIT 10";
  20. $stmt = $pdo->prepare($query);
  21. $stmt->execute(array('login' => $login));
  22. $data = $stmt->fetchAll(\PDO::FETCH_ASSOC);
  23.  
  24. usort($data, function($a, $b){
  25.         if ($a['id'] == $b['id']) {
  26.                 return 0;
  27.         }
  28.         // Здесь можно поменять ">" на "<"
  29.         // для изменения направления сортировки
  30.         return ($a['id'] > $b['id']) ? -1 : 1;
  31. });
  32.  
  33. var_dump($data);
8. grafillo - 17 Сентября, 2014 - 20:07:58 - перейти к сообщению
DelphinPRO пишет:
как-то так:

PHP:
скопировать код в буфер обмена
  1. // Где-то берем параметры подключения к БД
  2. $config = Registry::getConfig();
  3.  
  4. $host = $config->db['host'];
  5. $user = $config->db['user'];
  6. $pass = $config->db['pass'];
  7. $name = $config->db['name'];
  8.  
  9. // Подключаемся и настраиваемся
  10. $pdo = new \PDO( "mysql:dbname=$name;host=$host", $user, $pass );
  11. $pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
  12. $pdo->query("SET NAMES 'UTF8'");
  13.  
  14. // Дальше по вашему вопросу.
  15. $query = "SELECT *
  16.          FROM tb_private
  17.          WHERE who_user = :login
  18.          ORDER BY id DESC
  19.          LIMIT 10";
  20. $stmt = $pdo->prepare($query);
  21. $stmt->execute(array('login' => $login));
  22. $data = $stmt->fetchAll(\PDO::FETCH_ASSOC);
  23.  
  24. usort($data, function($a, $b){
  25.         if ($a['id'] == $b['id']) {
  26.                 return 0;
  27.         }
  28.         // Здесь можно поменять ">" на "<"
  29.         // для изменения направления сортировки
  30.         return ($a['id'] > $b['id']) ? -1 : 1;
  31. });
  32.  
  33. var_dump($data);


нихренасе и это всего лишь для сортировки массива такой код? х)

CODE (SQL):
скопировать код в буфер обмена
  1. $stmt = $pdo->prepare($query);
  2. $stmt->execute(array('login' => $login));
  3. $data = $stmt->fetchAll(\PDO::FETCH_ASSOC);
  4.  
  5. usort($data, FUNCTION($a, $b){
  6.         IF ($a['id'] == $b['id']) {
  7.                 RETURN 0;
  8.         }
  9.         // Здесь можно поменять ">" на "<"
  10.         // для изменения направления сортировки
  11.         RETURN ($a['id'] > $b['id']) ? -1 : 1;

эта часть ваще не понятна(((
9. DelphinPRO - 17 Сентября, 2014 - 20:28:30 - перейти к сообщению
grafillo пишет:
эта часть ваще не понятна(((

Выполняется запрос к БД, результат фетчится в массив данных, массив сортируется. Что здесь может быть непонятного?
10. ПТО - 17 Сентября, 2014 - 21:36:57 - перейти к сообщению
postgres->query("
WITH t (id, x, y, z) AS (SELECT * from tb_private WHERE who_user = '$login' ORDER BY id DESC LIMIT 10)
SELECT * FROM t ORDER BY id ASC;
");
11. Sail - 18 Сентября, 2014 - 08:03:45 - перейти к сообщению
И даже такой запросик прошёл:
CODE (SQL):
скопировать код в буфер обмена
  1. (SELECT * FROM `tablename` ORDER BY `id` DESC LIMIT 10) ORDER BY `id` ASC;
12. grafillo - 18 Сентября, 2014 - 09:20:56 - перейти к сообщению
[quote=Sail]И даже такой запросик прошёл:
CODE (SQL):
скопировать код в буфер обмена
  1. (SELECT * FROM `tablename` ORDER BY `id` DESC LIMIT 10) ORDER BY `id` ASC;
[/quote]

тут явные проблемы с пунктуацией потомучто такой код вообще не работает
(Добавление)
[quote=DelphinPRO]
grafillo пишет:
$stmt = $pdo->prepare($query);
$stmt->execute(array('login' => $login));
$data = $stmt->fetchAll(\PDO::FETCH_ASSOC);

usort($data, FUNCTION($a, $b){
IF ($a['id'] == $b['id']) {
RETURN 0;
}
// Здесь можно поменять ">" на "<"
// для изменения направления сортировки
RETURN ($a['id'] > $b['id']) ? -1 : 1;

тут какаято ошибка в 3 строке со знаком \
13. Sail - 18 Сентября, 2014 - 09:38:56 - перейти к сообщению
grafillo пишет:
тут явные проблемы с пунктуацией потомучто такой код вообще не работает

Отчего-же? Вполне работает. Возможно, точка с запятой в конце - лишние Улыбка
Что, кстати, mysql пишет в оправдание отказа воспринять "такой код"? Улыбка
Впрочем, можно обернуть:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM (SELECT * FROM `tablename` ORDER BY `id` DESC LIMIT 10) sub1 ORDER BY `id` ASC

...
grafillo пишет:
тут какаято ошибка в 3 строке со знаком \

Если не используете Пространства имен, то этот знак можно убрать.
14. RickMan - 18 Сентября, 2014 - 09:46:38 - перейти к сообщению
Вы выгоните?)
CODE (SQL):
скопировать код в буфер обмена
  1. (SELECT * FROM `tablename` ORDER BY `id` DESC LIMIT 10) ORDER BY `id` ASC;

Тоесть тут подохрительного не видите ничего? Откуда у вас там вхялся второй order но при этом нет select и указания from... Пробовали бы хотябы код который выкладываете на локальных таблицах...
15. Мелкий - 18 Сентября, 2014 - 09:50:44 - перейти к сообщению
RickMan пишет:
Тоесть тут подохрительного не видите ничего?

Нет. Абсолютно нормальный запрос.
Возможно, mysql only, это не помню.

 

Powered by ExBB FM 1.0 RC1