dragomironi
1.03.2014 - 00:45
Доброго времени суток, Господа!
Схожу с ума - есть ОДНА таблица table1, в ней поля id, idclient, idpart, date, формат даты дата-время.
Как мне сделать запрос уже затерялся в пучинах - в общем надо:
покуда в таблице дата дублируется для нескольких записей - мне надо выбрать все значения, где дата уникальна и вывести одно значение даты - ок не проблема и кучу имен, количеств и прочего. Сразу скажу эти значения даже по секундам равны, так как апдейтятся одновременно.
А, забыл самую главную загвоздку - все данные по уникальной дате выводятся в табличку, но у одного idclient может быть несколько дат - тобишь заказов по сути, и надо вывести все такие таблички, где дата уникальна.Приблизительно так:
Табл в скул:
ид идклиент имя количество дата1
ид2 идклиент имя2 количество2 дата1
ид3 идклиент имя3 количество3 дата2
ид4 идклиент имя4 количество4 дата2
Выводиться должно:
Табла1-
Дата1:
идклиент имя, имя2, ид, ид3
Табла2-
Дата2:
идклиент имя3, имя4, ид3, ид4
и т.д.
Подскажите пожалуйста уже весь день промаялся над невозможным, пришлось все переделывать за час.
dragomironi
1.03.2014 - 00:56
Может как-то для каждой даты создать темп таблицу, а уже оттуда фигачить? Но даже если так, то как это сделать, если можно, то подробнее - делаю это впервые за 8лет, посему нифига не помню...Буду очень благодарен, если поможете освежить.
А если сделать так. Обычный запрос и всё запихнуть в массив ?
$sql = mysql_query('тут запрос с сортировкой по id');
while ($a = mysql_fetch_assoc($sql)) {
$array[$a['date']][] = array('id'=>$a['id'],'idclient'=>$a['idclient']);
}
foreach ($array AS $date=>$value){
echo $date.'<br>';
print_r($value);
}
dr.nomore
1.03.2014 - 15:12
Потому что сделано неправильно. Дата заказа значения не имеет, она может быть любой. Сегодня заказал, завтра изменил, послезавтра добавил, прибавил и все это в текущем заказе. В котором 2 (ДВА) поля таймштамп: 1 дата начала действия и и 2 - дата прекращения действия. Должно быть побольше, но минимум 2.
Таким образом в ОДНОЙ таблице будут храниться все заказы всех юзеров и в любой момент любой юзер может посмотреть историю заказов и состояние текущих у которых дата окончания действия равна 0.
Активные заказы выбираются просто по дате закрытия = 0. Закрытые заказы по дате <> 0 сортируются и фильтруются юзером как он захочет. Можно календарь прикрутить.
AllesKlar
1.03.2014 - 19:11
Цитата |
Активные заказы выбираются просто по дате закрытия = 0 |
Это еще что за велосипед?
Состояние заказа зависит от даты?
Дата должна быть ДАТА, а не 0.
И даже не '0000-00-00 00:00', т.к. логика приложения должна строиться на логике, причем максимально прозрачной, а не на условностях.
У заказа должен быть статус.
Открыт, в обработке, на упаковке, отправлен, доставлен, оплачен, сторнирован и т.д.
Разработчик сам определяет, в какой момент считать заказ открытым, а в какой закрытым. И именно по значению поля "статус заказа" выбирать тот или иной.
dragomironi
Опиши на человеческом языке задачу, перепроектируем тебе базу.
_____________
[продано копирайтерам]
dragomironi
1.03.2014 - 21:55
Спасибо, конечно, но с перепроектировкой обождем:) Лучше завтра попробую приведенный метод, а там поглядим:) Но, браты, спасибо за совет!
dragomironi
2.03.2014 - 17:01
$db_host = 'п';
$db_name = 'в';
$db_username = 'апа';
$db_password = 'апап';
$user =& JFactory::getUser();
$us=$user->username;
echo '<p><b>Ваш логин:</b> '.$us.'</p>';
$i=$user->id;
echo '<p><b>Ваш ID:</b> '.$i.'</p>';
echo '<br/>';
// соединяемся с сервером базы данных
$connect_to_db = mysql_connect($db_host, $db_username, $db_password)
or die("Could not connect: " . mysql_error());
// подключаемся к базе данных
mysql_select_db($db_name, $connect_to_db)
or die("Could not select DB: " . mysql_error());
$sql = mysql_query("SELECT zakaz.idzakaz, zakaz.idpartaccess, zakaz.dop2, zakaz.sost, accessories.id, accessories.name, accessories.srok, accessories.price, parts.id, parts.name, parts.srok, parts.price FROM zakaz, accessories, parts WHERE zakaz.idclient=$i and zakaz.zaksub=2");
while ($a = mysql_fetch_assoc($sql)) {
$array[$a['date']][] = array('id'=>$a['id'],'idclient'=>$a['idclient']); // и т.д.
}
foreach ($array AS $date=>$value){
echo $date.'<br>';
print_r($value); // Тут что нужно сделаешь
}
or die(mysql_error());
Мужики-все не пойму, что с этим, блин делать, что за валуй? Помогите плз...
dragomironi
2.03.2014 - 17:06
Блин - объясните по-русски - что за массив такой $array[$a['date']][] и что значит array('id'=>$a['id'],'idclient'=>$a['idclient']) в упор не могу понять этого....блин ниче не соображаю.
dragomironi
2.03.2014 - 17:12
Задача то элементарная один запрос отсортировать - я в ужасе.
# Поле Тип Сравнение Атрибуты Null По умолчанию Дополнительно Действие
1 idzakaz int(11) Нет Нет AUTO_INCREMENT Ещё
2 idclient int(11) Нет Нет Ещё
3 idpartaccess int(11) Нет Нет Ещё
4 dop2 int(11) Нет Нет Ещё
5 sex int(11) Нет Нет Ещё
6 size int(11) Нет Нет Ещё
7 sost int(11) Нет Нет Ещё
8 zaksub int(11) Нет Нет Ещё
9 phone text cp1251_general_ci Нет Нет Ещё
10 date datetime
dragomironi
2.03.2014 - 17:24
Не пойму подставил в валуй $idclient по идее должен выводить idclient но нет выводит какую-то чепуху - весь массив.... а мне надо его сформировать при чем не все значения а строго по дате.
Выводит это:
Array ( [0] => Array ( [id] => 1 [idclient] => ) [1] => Array ( [id] => 1 [idclient] => ) [2] => Array ( [id] => 1 [idclient] => ) [3] => Array ( [id] => 1 [idclient] => ) [4] => Array ( [id] => 1 [idclient] => ) [5] => Array ( [id] => 1 [idclient] => ) [6] => Array ( [id] => 2 [idclient] => ) [7] => Array ( [id] => 2 [idclient] => ) [8] => Array ( [id] => 2 [idclient] => ) [9] => Array ( [id] => 2 [idclient] => ) [10] => Array ( [id] => 2 [idclient] => ) [11] => Array ( [id] => 2 [idclient] => ) [12] => Array ( [id] => 3 [idclient] => ) [13] => Array ( [id] => 3 [idclient] => ) [14] => Array ( [id] => 3 [idclient] => ) [15] => Array ( [id] => 3 [idclient] => ) [16] => Array ( [id] => 3 [idclient] => ) [17] => Array ( [id] => 3 [idclient] => ) [18] => Array ( [id] => 10 [idclient] => ) [19] => Array ( [id] => 10 [idclient] => ) [20] => Array ( [id] => 10 [idclient] => ) [21] => Array ( [id] => 10 [idclient] => ) [22] => Array ( [id] => 10 [idclient] => ) [23] => Array ( [id] => 10 [idclient] => ) [24] => Array ( [id] => 11 [idclient] => ) [25] => Array ( [id] => 11 [idclient] => ) [26] => Array ( [id] => 11 [idclient] => ) [27] => Array ( [id] => 11 [idclient] => ) [28] => Array ( [id] => 11 [idclient] => ) [29] => Array ( [id] => 11 [idclient] => ) )
dragomironi
2.03.2014 - 19:00
echo '<p><b>Ваш логин:</b> '.$us.'</p>';
$i=$user->id;
echo '<p><b>Ваш ID:</b> '.$i.'</p>';
echo '<br/>';
// соединяемся с сервером базы данных
$connect_to_db = mysql_connect($db_host, $db_username, $db_password)
or die("Could not connect: " . mysql_error());
// подключаемся к базе данных
mysql_select_db($db_name, $connect_to_db)
or die("Could not select DB: " . mysql_error());
$sql = mysql_query("SELECT zakaz.idzakaz, zakaz.idpartaccess, zakaz.date, zakaz.idclient, accessories.id, accessories.name WHERE zakaz.idpartaccess=accessories.id and zakaz.idclient=$i");
while ($data = mysql_fetch_array($sql)) {
echo '<p>'.$zakaz['date'].'</p>';
};
А почему он мне загоняет вот это?!!! Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resou Все ж должно работать!
dragomironi
2.03.2014 - 20:21
Ладно, все с валуем разобрался, что это массив много мерный, теперь ясно, но почему я пишу ему вот так:
while ($data=mysql_fetch_array($sql)) {
$array[$data['date']][] = array('id'=>$data['id'],'idclient'=>$data['idclient'], 'name'=>$data['name'], 'date'=>$data['date']);
};
foreach ($array AS $date=>$value){
echo $date. '<br>';
print_r($name);
}
, он выдает мне вот это: 0000-00-00 00:00:00
mosConfig_frontend_userparams2014-02-28 22:22:06
mosConfig_frontend_userparams
Хотя, как я понимаю должен выдать имя для даты...
dragomironi
2.03.2014 - 20:36
echo $date. '<br>';
print_r($value[0]['id']);
echo '<br>';
Вот так правельно?
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.