Имя:    Пароль:      Помнить меня       
Unsorted   ~  Software  ~  Development and Design  ~  Помощь по PHP Все вопросы по PHP сюда
На страницу «  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  »
Doctor_Mozg
Сообщение  21 Ноя 2006, 16:37  Ссылка : Ответить с цитатой
Возраст: 38 Пол: Мужской  Доверенный пользователь
C нами с 25.01.2005
Репутация: 133

Язык программирования, разработанный специально для динамической генерации веб-страниц. Намного превосходит возможности SSI. Имеет функции работы с базами данных (MySQL), создания графических файлов Jpeg и PNG (библиотека GD), обработки XML-документов и многие другие.
В начало
Профиль : Фотоальбом : Личное Сообщение : ICQ
Олег
Сообщение  26 Июн 2009, 18:25  Ссылка : Ответить с цитатой
Возраст: 45 Пол: Мужской  Доверенный пользователь
C нами с 27.03.2005
Репутация: 205.2

biorobot, спасибо за ссылку ( в Гугл Весело ), посмотрю, что люди говорят.

biorobot писал(а):
Я SQL не люблю, пишу по необходимости и как можно проще.
Ну я тоже не фанат, Смайлик но раз уж приходится иногда проектировать новые БД, а не только писать запросы к существующим — хочется делать это по возможности "красиво". Улыбочка

_____________________________
Уточняйте значение слов, и вы избавите человечество от половины своих заблуждений. Рене Декарт
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : E-mail
Doctor_Mozg
Сообщение  29 Июн 2009, 8:33  Ссылка : Ответить с цитатой
Возраст: 38 Пол: Мужской  Доверенный пользователь
C нами с 25.01.2005
Репутация: 133

Для нелюбителей писать запросы к БД рекомендую поискать какие-нибудь реализации объектно-реляционного отображения для РНР. Для Явы и .НЕТ мной, например, юзается очень любимая вещь под названием Hibernate: https://www.hibernate.org/

Для ПХП список тут: http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software#PHP

_____________________________
Это ты, Джон Уэйн?
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : ICQ
Павлин
Сообщение  01 Июл 2009, 8:58  Ссылка : Ответить с цитатой
Возраст: 38 Пол: Мужской 
C нами с 08.05.2009
Репутация: 5.6

Цитата:


Последний раз редактировалось: Павлин (02 Июл 2009, 13:42), всего редактировалось 1 раз

_____________________________
Прошу не тыкать в мануал его и так предостаточно!!!
В начало
Профиль : Личное Сообщение : Сайт : SkypeID : ICQ
Silicoid
Сообщение  01 Июл 2009, 10:12  Ссылка : Ответить с цитатой
Возраст: 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
писал в нотпэде и не проверял. по этому могут быть синтаксические ошибки
В начало
Профиль : Блог : Личное Сообщение : Сайт : ICQ
Павлин
Сообщение  01 Июл 2009, 12:57  Ссылка : Ответить с цитатой
Возраст: 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>Период&nbsp;№'.$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;

_____________________________
Прошу не тыкать в мануал его и так предостаточно!!!
В начало
Профиль : Личное Сообщение : Сайт : SkypeID : ICQ
Павлин
Сообщение  01 Июл 2009, 16:15  Ссылка : Ответить с цитатой
Возраст: 38 Пол: Мужской 
C нами с 08.05.2009
Репутация: 5.6

Silicoid, Я разобрался дело в том что поле "klient" не равно "klient" поэтому под <td>$row2[klient]</td> только одноимённый результат показывается а мне надо чтоб если другое имя klient то рядом должен появится ещё один столбец <td>$row2[klient]</td> и так до безконечности пока не закончаться "klient" а под "klient" должны соответствовать его-же продажи $row2[number]

_____________________________
Прошу не тыкать в мануал его и так предостаточно!!!
В начало
Профиль : Личное Сообщение : Сайт : SkypeID : ICQ
Silicoid
Сообщение  01 Июл 2009, 16:55  Ссылка : Ответить с цитатой
Возраст: 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х статических
опять-же на вскидку

хотя давайте так поступим. я не совсем понимаю смысел происходящего. потому как сижу на работе, а у меня тут ни апача, ни дримвивера. один фотошоп с иллюстратором
через пару часов приеду домой - подскажу чего-как
В начало
Профиль : Блог : Личное Сообщение : Сайт : ICQ
NarWhal
Сообщение  01 Июл 2009, 17:32  Ссылка : Ответить с цитатой
Возраст: 45 Пол: Мужской 
C нами с 03.03.2006
Репутация: 100.4

Отделите мух от котлет... в смысле, логику от разметки, и будет вам счастье! tmpl в этом помогут. Наиболее распространенное решение - библиотека smarty.

Изучить можно легко и быстро, потом код не превращается в кучу, извините, кала.
В начало
Профиль : Фотоальбом : Личное Сообщение
Павлин
Сообщение  02 Июл 2009, 8:14  Ссылка : Ответить с цитатой
Возраст: 38 Пол: Мужской 
C нами с 08.05.2009
Репутация: 5.6

Цитата:


Последний раз редактировалось: Павлин (03 Июл 2009, 12:02), всего редактировалось 1 раз

_____________________________
Прошу не тыкать в мануал его и так предостаточно!!!
В начало
Профиль : Личное Сообщение : Сайт : SkypeID : ICQ
Silicoid
Сообщение  02 Июл 2009, 9:34  Ссылка : Ответить с цитатой
Возраст: 45 Пол: Мужской 
C нами с 28.07.2005
Репутация: 135.1

тогда вопрос.
каким образом происходит заполнение полей орг1, Орг3, клиент 1 (думаю, что это покупатели) тогда что такое за поле "дата продажи" какую дату она показывает. Дату последней продажи?

я так понимаю есть 2 таблицы.
в 1й таблице есть записи по типу товара Наименование, тип упаковки, кол-во на складе. А во 2й таблице записана история сделок для покупателей орг1, орг2, клиент1 и т.д.?
или-же все эти данные держатся в одной таблице многократно дублируясь?


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


но это не самое страшное.
страшное в другом.
эту таблицу будет очень тяжело читать. хорошо, если покупателей - 3. Как сейчас. А если их будет 879 ??? это-же какая табличка получится?
в общем с точки зрения юзабильности это не удобно. (говорю как человек занимающийся разработкой таких-вот проектов) надо делать общую статистику по товарам, а уж потом, при выборе одного из товаров выводить список покупателей
В начало
Профиль : Блог : Личное Сообщение : Сайт : ICQ
Павлин
Сообщение  02 Июл 2009, 11:36  Ссылка : Ответить с цитатой
Возраст: 38 Пол: Мужской 
C нами с 08.05.2009
Репутация: 5.6

Это отчет дистрибутеров магазинов бывает не больше 30 и список товара не большой около 30, а базку я вам сдесь положу а насчет неудобства это их устраивает

Добавлено спустя 50 минут 21 секунду:

Silicoid,
Цитата:
или-же все эти данные держатся в одной таблице многократно дублируясь?

Да
Цитата:
Сначала надо загонять все значения в массив а потом уже этот массив разгребать, чтобы лишний раз не обращаться к базе (это долго)

т.е все поля Mysql в масив?

_____________________________
Прошу не тыкать в мануал его и так предостаточно!!!





128500.sql.zip - 2.46 Kб
Скачиваний: 4

В начало
Профиль : Личное Сообщение : Сайт : SkypeID : ICQ
Silicoid
Сообщение  02 Июл 2009, 20:14  Ссылка : Ответить с цитатой
Возраст: 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

В начало
Профиль : Блог : Личное Сообщение : Сайт : ICQ
Павлин
Сообщение  03 Июл 2009, 9:57  Ссылка : Ответить с цитатой
Возраст: 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

1.JPG - Просмотров: 8

Это то что получилось из того что вы написали
2.JPG

2.JPG - Просмотров: 4

В начало
Профиль : Личное Сообщение : Сайт : SkypeID : ICQ
Silicoid
Сообщение  03 Июл 2009, 10:23  Ссылка : Ответить с цитатой
Возраст: 45 Пол: Мужской 
C нами с 28.07.2005
Репутация: 135.1

надо посмотреть.
возможно, где-то циклы не полностью прогоняются.

вечером проверю


зы. за репутацию спасибо большое,
но старайтесь её не тратить особо. Тут некоторые её считают чем-то вроде мерила статуса....

ззы
кстати. клиентов - 6
"орг 3" повторяется 2 раза

Добавлено спустя 14 минут 35 секунд:

если интересует как работает. то в кратце это достаточно не сложно

сначала он определяет кол-во уникальных покупателей
потом кол-во уникальных товаров.

далее берет каждый товар из списка уникальных. (т.е. не повторяющихся) и находит к нему всех покупателей.
данные соответственно заносятся в ячейки. объемы продаж суммируются, а остаток получается путём вычитания из общего стока суммы всех покупок.

дата покупки - находится самая свежая для всей группы товаров
В начало
Профиль : Блог : Личное Сообщение : Сайт : ICQ
Павлин
Сообщение  03 Июл 2009, 10:44  Ссылка : Ответить с цитатой
Возраст: 38 Пол: Мужской 
C нами с 08.05.2009
Репутация: 5.6

Silicoid, Но заметьте что у орг3 разный T_name так что 7! А ещё Клиент9 и всё таки сколько вы бы взяли за одну страничку и запихнуть в готовый сайт? Улыбочка


Последний раз редактировалось: Павлин (03 Июл 2009, 11:57), всего редактировалось 1 раз

_____________________________
Прошу не тыкать в мануал его и так предостаточно!!!
В начало
Профиль : Личное Сообщение : Сайт : SkypeID : ICQ
Показать сообщения:   
На страницу «  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  »

Unsorted   ~  Software  ~  Development and Design  ~  Помощь по PHP

Ответить на тему

Перейти:  





Powered by phpBB   © Unsorted Team  support@unsorted.me  promo@unsorted.me  Полезные скрипты