Помогите пож, заблудился в трех строках

Toucan_bird

Новичок
Всем привет,
кто сталкивался - модуль магазина Aser'sShop присваивает всем заказам номер 1.
И в коде вроде бы есть проверка на последний номер, но какая-то через ж...

Помогите, как реализовать простую сплошную нумерацию - чтобы order_number шел с нуля и до посинения за всю историю магазина, а не эту странную идею - нумеровать только внутри дня...
Собственно все сводится с куску кода:

$Realdate = mktime();
$d = date("Ymd", $Realdate);
$result = $db->sql_query("select ".$prefix."_order_number from asershop_orders where date='$d' order by order_number DESC");

if($result) {
list($order_number)=$db->sql_fetchrow($result);
$order_number++;
} else {
$order_number = 1;
}

Оцените корректность. Суть в том, что order_number всегда получается равным 1, а должен каждый раз увеличиваться на 1.

Помогите плз.
 

AmdY

Пью пиво
Команда форума
вы решаете вопрос не с той стороны, вам нужно при вставке просто инкрементировать этот номер
INSERT .....
SET _order_number = MAX(_order_number )+1,
.....
 

Toucan_bird

Новичок
Мысль понял, интересная. правда попробовал прямо вставить - не пошло :))
Вопрос: надо ли перед этим определять значение order number?
И как? (я плохо знаю синтаксис пхп, помогите пожалуйста)
 

Toucan_bird

Новичок
У меня вставка сейчас выглядит вот так:
$db->sql_query("insert into ".$prefix."_asershop_orders values (NULL, '$d', '$order_number', '$ip', '$auth_name', '$order_description_db', '$subtotal', '$ship_price', '$o_total', now(), '0')");

как здесь правильно этот самый SET прописать?
 

s@nch0

Хочу всё знать
А может быть вообще эту операцию нужно было доверить самому мускулю ? Выставить для поля нужные параметры, типа AUTO_INCREMENT, UNIQUE...
В коде в запросе убрать обновление этого поля.
 

s@nch0

Хочу всё знать
Нет, только одно поле, в которое пишется этот самый номер.
 

Toucan_bird

Новичок
И как тогда строка вставки должна выглядеть? Ведь order_number будет нумероваться автоматически, а остальные данные все же нужно сохранять?
Просто стереть из вставки order_number?
 

Toucan_bird

Новичок
Скинь структуру нужной таблицы.
#
# Структура таблицы `nuke_asershop_orders`
#

CREATE TABLE nuke_asershop_orders (
lid int(11) NOT NULL auto_increment,
date int(11) NOT NULL default '0',
order_number int(11) NOT NULL default '0',
ip varchar(255) NOT NULL default '',
uname varchar(255) NOT NULL default '',
order_description text,
subtotal double(10,2) NOT NULL default '0.00',
ship_price double(10,2) NOT NULL default '0.00',
total double(10,2) NOT NULL default '0.00',
ship_date datetime default NULL,
order_status int(11) NOT NULL default '0',
PRIMARY KEY (lid),
KEY lid (lid)
) TYPE=MyISAM;
 

s@nch0

Хочу всё знать
Мой вариант не прокатит. В таблице уже есть ключ с автоинкрементом. Поэтому только через исходники.
 

Toucan_bird

Новичок
Мой вариант не прокатит. В таблице уже есть ключ с автоинкрементом. Поэтому только через исходники.
Жаль ((
Ну а через исходники должно быть тоже просто (хоть и не так изящно) реализовать:
читаем последнее значение order_number, прибавляем к нему 1, записываем в таблицу...
как это синтаксически описать?
 

s@nch0

Хочу всё знать
Если я не ошибаюсь, то в реалиях твоего кода должно быть так:

PHP:
$Realdate = mktime();
$d = date("Ymd", $Realdate);
$result = $db->sql_query("select ".$prefix."_order_number from asershop_orders where date='$d' order by ".$prefix."_order_number DESC LIMIT 0,1");

if($result) {
$row = $db->sql_fetchrow($result);
$row[$prefix."_order_number"]++;
} else {
$row[$prefix."_order_number"] = 1;
}
 

s@nch0

Хочу всё знать
Но в любом случае, тут идёт условие на выборку и номер заказа будет увеличиваться только в текущем дне. С каждым днём нумерация будет начинаться сначала.
 

s@nch0

Хочу всё знать
Чтоб была сквозная, попробуй вот этот запрос - SELECT MAX(`_order_number`) FROM `asershop_orders`
У поля есть свой префикс, поэтому учти это в запросе, тут я его упустил.
 

Toucan_bird

Новичок
Если я не ошибаюсь, то в реалиях твоего кода должно быть так:

PHP:
$Realdate = mktime();
$d = date("Ymd", $Realdate);
$result = $db->sql_query("select ".$prefix."_order_number from asershop_orders where date='$d' order by ".$prefix."_order_number DESC LIMIT 0,1");

if($result) {
$row = $db->sql_fetchrow($result);
$row[$prefix."_order_number"]++;
} else {
$row[$prefix."_order_number"] = 1;
}
Не, это тоже самое, что и было. А если без привязки к дате (только путает), сплошную нумерацию сделать - от 0 и до бесконечности с шагом 1.
 

s@nch0

Хочу всё знать
Запусти под отладчиком, может быть у тебя вообще запрос не отрабатывается и по условию присваивается 1.
 

Toucan_bird

Новичок
Я так и не понял до конца в чем был глюк, но поскольку вопрос срочный решил задачу следующим образом:

$order_number = time();

И вуаля... :)) сплошная нумерация, правда не с нуля и даже далеко не с единицы как я хотел... но в целом задача решена.
Спасибо всем, кто помогал советом.
 
Сверху