|
На страницу « 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 » |
|
|
|
|
Возраст: 38 C нами с 25.01.2005 Репутация: 133
|
|
Язык программирования, разработанный специально для динамической генерации веб-страниц. Намного превосходит возможности SSI. Имеет функции работы с базами данных (MySQL), создания графических файлов Jpeg и PNG (библиотека GD), обработки XML-документов и многие другие.
|
|
|
|
|
|
|
|
Возраст: 45 C нами с 27.03.2005 Репутация: 205.2
|
|
biorobot, спасибо за ссылку ( в Гугл ), посмотрю, что люди говорят.
biorobot писал(а): |
Я SQL не люблю, пишу по необходимости и как можно проще.
|
Ну я тоже не фанат, но раз уж приходится иногда проектировать новые БД, а не только писать запросы к существующим — хочется делать это по возможности "красиво".
|
_____________________________ Уточняйте значение слов, и вы избавите человечество от половины своих заблуждений. Рене Декарт
|
|
|
|
|
|
|
Возраст: 38 C нами с 25.01.2005 Репутация: 133
|
|
|
|
|
|
|
|
Возраст: 38 C нами с 08.05.2009 Репутация: 5.6
|
|
|
Последний раз редактировалось: Павлин (02 Июл 2009, 13:42), всего редактировалось 1 раз
_____________________________ Прошу не тыкать в мануал его и так предостаточно!!!
|
|
|
|
|
|
|
Возраст: 45 C нами с 28.07.2005 Репутация: 135.1
|
|
$table_header = '<table border="1" bgcolor="#FFFFb1" cellspacing="0" cellpadding="2"><tr><td>Наименование</td><td>Package</td><td>'.$row2[klient].'</td><td>На складе</td> <td>Остаток</td><td>Дата продажи</td></tr>';
$table_futter='</table>';
$table_body='';
while ($row2 = mysql_fetch_assoc($result1))
{
$table_body=$table_body.'<tr><td>'.$row2[t_name].'</td><td>'.$row2[t_ypakovka].'</td><td>'.$row2[number].'</td><td>'.$row2[stock].'</td><td>'.$row2[rest].'</td><td>'.$row2[s_date].'</td></tr>';
}
echo $table_header.$table_body.$table_futter;
|
ps
писал в нотпэде и не проверял. по этому могут быть синтаксические ошибки
|
|
|
|
|
|
|
|
Возраст: 38 C нами с 08.05.2009 Репутация: 5.6
|
|
Silicoid,
Цитата: |
$table_header = '<table border="1" bgcolor="#FFFFb1" cellspacing="0" cellpadding="2"><tr><td>Наименование</td><td>Package</td><td>$row2[klient]</td><td>На складе</td> <td>Остаток</td><td>Дата продажи</td></tr>';
$table_futter='</table>';
$table_body='';
|
переменная$row2[klient] объявлена выше чем функция переменной while ($row2 = mysql_fetch_assoc($result1)) а как можно её обявить раньше?
Silicoid, Я нашел способ как объявить переменную теперь у меня должно быть 4 результата по запрошенному юзеру а он мне выдаёт только 3 как будто другая 1 уходит в верхнюю 1 строку таблицы
$sql1 = "SELECT users.u_name, sales.t_name, sales.t_ypakovka, sales.klient, sales.stock,
sales.number, sales.s_date, sales.rest
FROM users
JOIN sales ON sales.u_id = users.u_id
WHERE sales.u_id = (".$user.") GROUP BY sales.t_ypakovka, sales.klient";
$result1 = mysql_query($sql1);
if (!$result1) {
echo "Ошибка ввода вывода:($sql1) from DB: " . mysql_error();
exit;
}
if (mysql_num_rows($result1) == 0) {
echo "Не найдено записей! Попробуйте другой запрос!";
exit;
}
$row1 = mysql_num_rows($result1);
$row11 = mysql_fetch_assoc($result1);
echo "Пользователь $row11[u_name] оставил(а) $row1 записи(ей).";
echo ("<br><br><center><b>Таблица</b></center>");
$sql3 = "SELECT periods.period, periods.year, periods.month, periods.date
FROM periods
WHERE periods.period =(".$period.") and periods.date =(".$date.")";
$result3 = mysql_query($sql3);
if (!$result3) {
echo "Ошибка ввода вывода:($sql3) from DB: " . mysql_error();
exit;
}
if (mysql_num_rows($result3) == 0) {
echo "Не найдено записей! Попробуйте другой запрос!";
exit;
}
$row31 = mysql_fetch_assoc($result3);
$table_header = '<table border="1" bgcolor="#FFFFb1" cellspacing="0" cellpadding="2"><tr><td
colspan="3"><font color="ff0000"><H2>Отчет заполняется в коробах</H2></td><td colspan="3"
align="center"><font
color="ff0000"><H2>Период №'.$row31[period].'</H2></td></tr><tr><td>Наименование</td><td>Package</
td><td>'.$row11[klient].'</td><td>На складе</td> <td>Остаток</td><td>Дата продажи</td></tr>';
$table_futter='</table>';
$table_body='';
while ($row2 = mysql_fetch_assoc($result1))
{
$table_body=$table_body.'<tr><td>'.$row2[t_name].'</td><td>'.$row2[t_ypakovka].'</td><td>'.$row2[number
].'</td><td>'.$row2[stock].'</td><td>'.$row2[rest].'</td><td>'.$row2[s_date].'</td></tr>';
}
echo $table_header.$table_body.$table_futter;
|
|
_____________________________ Прошу не тыкать в мануал его и так предостаточно!!!
|
|
|
|
|
|
|
Возраст: 38 C нами с 08.05.2009 Репутация: 5.6
|
|
Silicoid, Я разобрался дело в том что поле "klient" не равно "klient" поэтому под <td>$row2[klient]</td> только одноимённый результат показывается а мне надо чтоб если другое имя klient то рядом должен появится ещё один столбец <td>$row2[klient]</td> и так до безконечности пока не закончаться "klient" а под "klient" должны соответствовать его-же продажи $row2[number]
|
_____________________________ Прошу не тыкать в мануал его и так предостаточно!!!
|
|
|
|
|
|
|
Возраст: 45 C нами с 28.07.2005 Репутация: 135.1
|
|
вариант такой
$table_header_a = '<table border="1" bgcolor="#FFFFb1" cellspacing="0" cellpadding="2"><tr><td>Наименование</td><td>Package</td>';
$table_header_b ='';
$table_header_c ='<td>На складе</td> <td>Остаток</td><td>Дата продажи</td></tr>';
$table_futter='</table>';
$table_body='';
while ($row2 = mysql_fetch_assoc($result1))
{
$table_header_b = $table_header_b.'<td>'.$row2[klient].'</td>';
$table_body=$table_body.'<tr><td>'.$row2[t_name].'</td><td>'.$row2[t_ypakovka].'</td><td>'.$row2[number].'</td><td>'.$row2[stock].'</td><td>'.$row2[rest].'</td><td>'.$row2[s_date].'</td></tr>';
}
echo $table_header_a.$table_header_b.$table_header_c.$table_body.$table_futter; |
т.е. таблицу теперь придется собирать из 5 частей. 2х динамических и 3х статических
опять-же на вскидку
хотя давайте так поступим. я не совсем понимаю смысел происходящего. потому как сижу на работе, а у меня тут ни апача, ни дримвивера. один фотошоп с иллюстратором
через пару часов приеду домой - подскажу чего-как
|
|
|
|
|
|
|
|
Возраст: 45 C нами с 03.03.2006 Репутация: 100.4
|
|
Отделите мух от котлет... в смысле, логику от разметки, и будет вам счастье! tmpl в этом помогут. Наиболее распространенное решение - библиотека smarty.
Изучить можно легко и быстро, потом код не превращается в кучу, извините, кала.
|
|
|
|
|
|
|
|
Возраст: 38 C нами с 08.05.2009 Репутация: 5.6
|
|
|
Последний раз редактировалось: Павлин (03 Июл 2009, 12:02), всего редактировалось 1 раз
_____________________________ Прошу не тыкать в мануал его и так предостаточно!!!
|
|
|
|
|
|
|
Возраст: 45 C нами с 28.07.2005 Репутация: 135.1
|
|
тогда вопрос.
каким образом происходит заполнение полей орг1, Орг3, клиент 1 (думаю, что это покупатели) тогда что такое за поле "дата продажи" какую дату она показывает. Дату последней продажи?
я так понимаю есть 2 таблицы.
в 1й таблице есть записи по типу товара Наименование, тип упаковки, кол-во на складе. А во 2й таблице записана история сделок для покупателей орг1, орг2, клиент1 и т.д.?
или-же все эти данные держатся в одной таблице многократно дублируясь?
если я правильно понял структуру таблицы, то при помощи одного цикла её не решить. Сначала надо загонять все значения в массив а потом уже этот массив разгребать, чтобы лишний раз не обращаться к базе (это долго)
но это не самое страшное.
страшное в другом.
эту таблицу будет очень тяжело читать. хорошо, если покупателей - 3. Как сейчас. А если их будет 879 ??? это-же какая табличка получится?
в общем с точки зрения юзабильности это не удобно. (говорю как человек занимающийся разработкой таких-вот проектов) надо делать общую статистику по товарам, а уж потом, при выборе одного из товаров выводить список покупателей
|
|
|
|
|
|
|
|
Возраст: 38 C нами с 08.05.2009 Репутация: 5.6
|
|
Это отчет дистрибутеров магазинов бывает не больше 30 и список товара не большой около 30, а базку я вам сдесь положу а насчет неудобства это их устраивает
Добавлено спустя 50 минут 21 секунду:
Silicoid,
Цитата: |
или-же все эти данные держатся в одной таблице многократно дублируясь?
|
Да
Цитата: |
Сначала надо загонять все значения в массив а потом уже этот массив разгребать, чтобы лишний раз не обращаться к базе (это долго)
|
т.е все поля Mysql в масив?
|
_____________________________ Прошу не тыкать в мануал его и так предостаточно!!!
128500.sql.zip - 2.46 Kб
Скачиваний: 4
|
|
|
|
|
|
|
Возраст: 45 C нами с 28.07.2005 Репутация: 135.1
|
|
Отрыл базу, запрос и результат.
ну и задачка. Тут без стакана не разобраться....
налил чая .. разбираюсь.
можно эту задачку решить в лоб, но тогда кол-во запросов к базе будет равно кол-ву строк в таблице... можно попытаться обойтись одним запросом, но тогда будет куча циклов иначе никак.
Добавлено спустя 2 часа 39 минут 9 секунд:
Вот код, который выдает правильный ответ.
а вообще, батенька, вы извращенец.
тут пришлось одномерный массив в двухмерный перебрасывать.
<?php
function array_unique_slice($from) {
for ($i=count($from)-1;$i>1;$i--) {
$last = $from[$i];
$from[$i] = false;
if (!in_array($last,$from)) {
$from[$i]=$last;
}
}
$from = array_unique($from);
$from = array_slice($from,0,count($from)-1);
return $from;
}
function db_query($query)
{//database_config
$mysql_host = 'localhost';
$mysql_user = 'root';
$mysql_dbs = 'tbd';
$mysql_password = '';
$link = mysql_connect($mysql_host, $mysql_user, $mysql_password) or die("Could not connect");
mysql_select_db($mysql_dbs)
or die("Could not select database <br> $mysql_dbs");
$result = mysql_query($query) or die("Query failed. <br> $query");
return $result;
mysql_close($link);
}
$uid = 2;
$query = "SELECT users.u_name, sales.t_name, sales.t_ypakovka, sales.klient, sales.stock, sales.number, sales.s_date, sales.rest
FROM users LEFT JOIN sales ON sales.u_id = users.u_id
WHERE sales.u_id ='".$uid."' GROUP BY sales.t_ypakovka, sales.klient";
$result = db_query($query);
$max_lines = mysql_numrows($result);
//разгоняем все по массивам
for ($i=0;$i<=$max_lines;$i++)
{
$line = mysql_fetch_array($result, MYSQL_ASSOC);
$t_name[] = $line['t_name']; // тут будет весь список товаров
$klients[]= $line['klient']; // a тут список клиентов (из всех полей)
$data[$i] = $line;
if (isset($line['s_date'])){
$date_p = explode(".",$line['s_date']);
$data[$i]['unix_timestamp'] = mktime(0,0,0,$date_p[1],$date_p[0],$date_p[2]); //тут все даты переводятся в формат Unix timestamp иеаче потом находить самую свежую будет тааакой гемор!
}
}
// определяем название и кол-во клиентов динамические Y позиции
$klients_names = array_unique_slice($klients);
$klients_count = count($klients_names);
// определяем название и кол-во товаров динамические X позиции
$goods_names = array_unique_slice($t_name);
$goods_count = count($goods_names);
//1. создаем заголовок таблицы
$table_header = '<body><table border="1" bgcolor="#FFFFb1" cellspacing="0" cellpadding="2"><tr><td>Наименование</td><td>Package</td>';
for ($y=0;$y<$klients_count;$y++) {$table_header = $table_header.'<td>'.$klients_names[$y].'</td>';}
$table_header = $table_header.'<td>На складе</td> <td>Остаток</td><td>Дата продажи</td></tr>';
$table_futter='</table></body>';
$table_body='';
//создаем таблицу
for ($x=0;$x<$goods_count;$x++)
{
$work_db = array();
// имя по которому производится поиск
$item_name = $goods_names[$x];
// сканируем массив на предмет наличия в нем сопутствующийх строк
// если есть совпадающие товары. скидываем их в отдельный массив
$date = 0;
$pos = 0;
for ($i=0;$i<$max_lines;$i++) {
$line = $data[$i];
if ($line['t_name'] == $item_name)
{
$work_db[$line['klient']] = $line;
// находим дату последней продажи
if ($line['unix_timestamp'] > $date) {$date = $line['unix_timestamp'];}
$pos++;
}
}
// для упрощения берем все статические параметры из первого значения массива
$arr_keys = array_keys($work_db);
$pakage = $work_db[$arr_keys[0]]['t_ypakovka'];
$table_body=$table_body.'<tr><td>'.$goods_names[$x].'</td><td>'.$pakage.'</td>';
// создаем динамические столбцы
$max_sales = 0;
$max_stock = 0;
for ($y=0;$y<$klients_count;$y++)
{
if (isset($work_db[$klients_names[$y]]['number'])) {
$table_body = $table_body.'<td>'.$work_db[$klients_names[$y]]['number'].'</td>';
$max_sales=$max_sales+$work_db[$klients_names[$y]]['number'];
$max_stock=$max_stock+$work_db[$klients_names[$y]]['stock'];
} else {$table_body = $table_body.'<td> - </td>';}
}
$table_body = $table_body.'<td>'.$max_stock.'</td><td>'.($max_stock-$max_sales).'</td><td>'.date ("d.m.Y",$date).'</td></tr>';
}
echo $table_header.$table_body.$table_futter;
?>
|
в следующий раз я буду за такую работу деньги брать
чесслово 4 часа потратил чтоб решить такую задачку методом "Через жопу", когда сделать её можно было гораздо проще.
вот вам подсказка.
если видите, что задача не решается просто, то значит аналитически вы её не проработали.
|
index.zip - 1.8 Kб
Скачиваний: 5
|
|
|
|
|
|
|
Возраст: 38 C нами с 08.05.2009 Репутация: 5.6
|
|
Silicoid, А сколько вы бы взяли денег за одну страничку и запихнуть в готовый сайт?
Спасибо, А ещё она не совсем корректно работает даю скрины что получилось
Смысл таков клиентов 7 по u_id=1 а отображается только 5 и я не пойму почему код для меня слишком сложный. Я половину разобрал а половину вообще не понял. я в этом деле!
|
Последний раз редактировалось: Павлин (03 Июл 2009, 13:18), всего редактировалось 1 раз
_____________________________ Прошу не тыкать в мануал его и так предостаточно!!!
Это то что есть в mysql->128500->sales.u_id=1
1.JPG - Просмотров: 8
Это то что получилось из того что вы написали
2.JPG - Просмотров: 4
|
|
|
|
|
|
|
Возраст: 45 C нами с 28.07.2005 Репутация: 135.1
|
|
надо посмотреть.
возможно, где-то циклы не полностью прогоняются.
вечером проверю
зы. за репутацию спасибо большое,
но старайтесь её не тратить особо. Тут некоторые её считают чем-то вроде мерила статуса....
ззы
кстати. клиентов - 6
"орг 3" повторяется 2 раза
Добавлено спустя 14 минут 35 секунд:
если интересует как работает. то в кратце это достаточно не сложно
сначала он определяет кол-во уникальных покупателей
потом кол-во уникальных товаров.
далее берет каждый товар из списка уникальных. (т.е. не повторяющихся) и находит к нему всех покупателей.
данные соответственно заносятся в ячейки. объемы продаж суммируются, а остаток получается путём вычитания из общего стока суммы всех покупок.
дата покупки - находится самая свежая для всей группы товаров
|
|
|
|
|
|
|
|
Возраст: 38 C нами с 08.05.2009 Репутация: 5.6
|
|
Silicoid, Но заметьте что у орг3 разный T_name так что 7! А ещё Клиент9 и всё таки сколько вы бы взяли за одну страничку и запихнуть в готовый сайт?
|
Последний раз редактировалось: Павлин (03 Июл 2009, 11:57), всего редактировалось 1 раз
_____________________________ Прошу не тыкать в мануал его и так предостаточно!!!
|
|
|
|
|
|
|
На страницу « 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 »
|
|