X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость ( Вход | Регистрация )

Открыть тему
Тема закрыта
> Вывод данных через сортировку в mysql
kvins
kvins
Topic Starter сообщение 20.8.2012, 18:52; Ответить: kvins
Сообщение #1


Завсегдатай
*****


Группа: Active User
Сообщений: 750
Регистрация: 7.9.2011
Из: москва
Поблагодарили: 89 раз
Репутация:   7  


Щас мне нужно отредактировать сайт , и вытаскивать последний элемент с таблицы к примеру

SELECT * FROM tovars WHERE razdel='$cat' ORDER BY id DESC

строка id в таблице с первичным ключем , тоесть сама выставляется

Не знаю почему , но в базе иногда строка id идет не по порядку , сбивается и иногда вытаскивается не то что мне нужно.

тоесть записались id 45 , 46 , 47 а потом на тебе 50 а после этого 48, 49

Есть ли более точная выборка их базы чем DESC ?


--------------------
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Pepper
Pepper
сообщение 20.8.2012, 18:57; Ответить: Pepper
Сообщение #2


Бывалый
****

Группа: User
Сообщений: 393
Регистрация: 14.1.2011
Поблагодарили: 123 раза
Репутация:   31  


Не по порядку в phpmyadmin, может быть?

Экспортируйте таблицу (структуру) и покажите тут. Код будет выглядеть как CREATE TABLE...


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
rjksdfhe
rjksdfhe
сообщение 20.8.2012, 19:09; Ответить: rjksdfhe
Сообщение #3


Straight arms
*******

Группа: Active User
Сообщений: 2760
Регистрация: 21.4.2009
Из: Мытищи, МО, РФ
Поблагодарили: 1111 раз
Репутация:   163  


Не знаю почему , но в базе иногда строка id идет не по порядку , сбивается и иногда вытаскивается не то что мне нужно.
тоесть записались id 45 , 46 , 47 а потом на тебе 50 а после этого 48, 49
Есть ли более точная выборка их базы чем DESC ?


Всё правильно, по логике баз данных.

Если были удалены какие-то строки в середине, то при добавлении новых сначала ищутся пустые места среди удалённых, и туда записывается новая строка. Работает логика оптимизации занимаемого дискового пространства.

Для программы это всё равно, как они физически расположены в БД. Если вызываете с "ORDER BY id DESC", то всё обработается как надо. А физически - будут идти не по порядку. При выгрузке порядок физический.

Или такой вариант выбора последней записи (хотя и первые должны работать):

class MySQL {
...
    function next () { // получение значения AUTO_INCREMENT
        $table=$this->autoModule ($table);
        //$r=$this->getrow ("SHOW TABLE STATUS FROM {$this->access[3]} LIKE '$table'");
        //return $r['Auto_increment'];
        // на nic.ru это не работает, приходится как ниже
        $next=1+$this->get ("SELECT max(id) FROM $table");
        $this->query ("ALTER TABLE $table AUTO_INCREMENT=$next");
        return $next;
    }
...
}


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
kvins
kvins
Topic Starter сообщение 20.8.2012, 19:38; Ответить: kvins
Сообщение #4


Завсегдатай
*****


Группа: Active User
Сообщений: 750
Регистрация: 7.9.2011
Из: москва
Поблагодарили: 89 раз
Репутация:   7  


(rjksdfhe @ 20.8.2012, 18:09) *
Если были удалены какие-то строки в середине, то при добавлении новых сначала ищутся пустые места среди удалённых,


Вот да такая фигня скорее всего и была (потому что я не видел новые записи в конце списка), щас почему то все окей работает , но для этого пришлось пустышками забросать , потому что как то он мне не коректно выводил информацию , а по id как раз формировались картинки , вчера все наладилось , но я подумал может есть что понадежней чем тот вывод .

Ну раз товары вроде больше не должны из середины удалять , то думаю все окей будет

(rjksdfhe @ 20.8.2012, 18:09) *
Работает логика оптимизации занимаемого дискового пространства.


И еще раз спс за инфу , раньше не знал об этом и не мог понять


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
kolega
kolega
сообщение 20.8.2012, 21:00; Ответить: kolega
Сообщение #5


Новичок
*


Группа: User
Сообщений: 31
Регистрация: 15.6.2012
Поблагодарили: 14 раз
Репутация:   4  


SELECT * FROM tovars WHERE id = (SELECT MAX(id) FROM tovars WHERE razdel='$cat') LIMIT 1


Сообщение отредактировал kolega - 20.8.2012, 21:05
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
kvins
kvins
Topic Starter сообщение 30.8.2012, 13:46; Ответить: kvins
Сообщение #6


Завсегдатай
*****


Группа: Active User
Сообщений: 750
Регистрация: 7.9.2011
Из: москва
Поблагодарили: 89 раз
Репутация:   7  


(kolega @ 20.8.2012, 20:00) *


Так и думал что есть какие то хитрости с нужным , выводом , тока выборку чуть поправил , потому что у тебя немного не точно

SELECT * FROM tovars WHERE id = (SELECT MAX(id)) ORDER BY id DESC LIMIT 1

Без ORDER BY id DESC он показывал первый товар


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Горячая тема (нет новых ответов) Вывод с вебмани
204 MaxChemist 29582 Сегодня, 13:46
автор: Mikki
Горячая тема (нет новых ответов) Вывод с вебмани и налоговая
115 Konark 17860 9.12.2017, 21:48
автор: Mikki
Горячая тема (нет новых ответов) [Cashbank.pro] Qiwi>btc. Вывод и обмен. Работаем с наличными! Подарок каждому 5$
74 Cashbank 15689 8.12.2017, 21:11
автор: Cashbank
Горячая тема (нет новых ответов) Комплексный (SEO) аудит сайтов, нахождение и устранение всех ошибок сайта. Вывод в ТОП
29 Taylor 9932 8.12.2017, 13:40
автор: kukla
Открытая тема (нет новых ответов) dbchange.ru - ВВОД, ВЫВОД, ОБМЕН: BTC, Qiwi, Яд, LTC, PM, PR24, EXMO, Альфа CASH-IN, наличные (RU/UA)
6 dbchange 1469 5.12.2017, 19:41
автор: dbchange


 



RSS Текстовая версия Сейчас: 11.12.2017, 19:29
Дизайн