Forum Webscript.Ru

Программирование => PHP => Тема начата: граф от 27 Ноября 2008, 11:56:47

Название: разбивка вывода
Отправлено: граф от 27 Ноября 2008, 11:56:47
сижу туплю, не могу понять как
есть запрос к базе, он выводит данные.
все очень классно. но тут вдруг понадобилось эти данные раздробить. в принципе, можно сделать несколько запросов к базе и вывести.  но ведь наверняка можно средствами php их разделить.


$VYVOD.=\'
 
    \'.$i.\'
    \'.$row[\'mesyaz\'].\'
    \'.$row[\'m_kol\'].\'    
  \';
?>
 
 

 
   
   
   
 

номкол-вомесяц

 

вот решили разбить по месяцам
и посчитать сколько в каком было.. можно конечно в конце вывести в каком что.. но захотелось что бы после каждого месяца был вывод чего сколько..
помогите.
Название: разбивка вывода
Отправлено: ravshaniy от 27 Ноября 2008, 22:09:56
в запросе ORDER BY по месяцам
в скрипте один иф с проверкой не новый ли это месяц, все суммы в переменные.

либо два запроса, один с GROUP BY и с суммированием полей которые вам нужны, другой можно с ORDER BY можно без. получите два массива
Название: разбивка вывода
Отправлено: CGVictor от 27 Ноября 2008, 23:46:46
Цитировать
граф:
есть запрос к базе, он выводит данные.

Есть запрос к базе, он выводит данные. Лучше его тоже показать.
Название: разбивка вывода
Отправлено: граф от 02 Декабря 2008, 00:18:02
ну а толку от запроса? обычный запрос
$res=mysql_query("
SELECT *
FROM tab
WHERE st=1
") or die(mysql_error());
Название: разбивка вывода
Отправлено: граф от 02 Декабря 2008, 17:04:17
Цитировать
ravshaniy:
в скрипте один иф с проверкой не новый ли это месяц

а как так ему объяснить?
Название: разбивка вывода
Отправлено: граф от 02 Декабря 2008, 19:38:40
задача усложнилась:( вот тут http://phpclub.ru/talk/showthread.php?s=&postid=827583 расписал что и как..:(
Название: разбивка вывода
Отправлено: hanslinger от 03 Декабря 2008, 08:31:01
тебе пиздец! :)
Название: разбивка вывода
Отправлено: граф от 03 Декабря 2008, 16:33:19
тут видно принято .... обкладывать?
Название: разбивка вывода
Отправлено: hanslinger от 03 Декабря 2008, 16:45:55
Тут принято помогать людям, которые понимают, что делают.
Название: разбивка вывода
Отправлено: граф от 03 Декабря 2008, 16:55:31

$resstr=mysql_query("
SELECT `st_id`, `st_list`
FROM `strana`
") or die(mysql_error());
    while ($rowstr = mysql_fetch_array($resstr)) {
        $strid[$rowstr[\'st_id\']]=$rowstr[\'st_id\'];
}
$resrek=mysql_query("
SELECT `re_id`, `re_nazvanie`
FROM `reklama`
") or die(mysql_error());
    while ($rowrek = mysql_fetch_array($resrek)) {
        $rekid[$rowrek[\'re_id\']]=$rowrek[\'re_id\'];
}
// собираю страны и издания, дальше запрос к базе основной


$res=mysql_query("
SELECT *
FROM `zvonki`
LEFT JOIN `reklama` ON `re_id`=`zv_reklama_ist`
LEFT JOIN `strana` ON `st_id`=`zv_strana
ORDER BY  re_id, st_id
") or die(mysql_error());
while ($row = mysql_fetch_array($res)) {

$r1=$row[\'re_id\']; // ставлю одну переменную
    if ($row[\'re_id\']==$rekid[$row[\'re_id\']]) {
        if ($row[\'st_id\']==$strid[$row[\'st_id\']]) {

$VYVOD.=\'
 
    \'.$row[\'re_nazvanie\'].\'
    \'.$row[\'st_list\'].\'
    \'.$row[\'zv_summa\'].\'
  \';
  if ($r1!=$r2) { //
 $VYVOD.=\'
 
    Итог:
   
    \'.$summa.\'
  \';
  }
$r2=$row[\'re_id\']; // ставлю вторую переменную
}
}
}

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

журнал сумма
                итог сумма
журнал сумма
журнал сумма
журнал сумма
журнал сумма

а нужно вот так:

журнал сумма
журнал сумма
журнал сумма
журнал сумма
журнал сумма
                итог сумма

потому и спрашиваю, как правильно сделать.
потому что не понимаю как задать переменные на которые ориентироваться.
Название: разбивка вывода
Отправлено: APL от 03 Декабря 2008, 17:03:00
хммм.... может я тупой и вопрос не понял... что вам мешает вывод делать том порядке который вам нужен?

$resstr=mysql_query("
SELECT `st_id`, `st_list`
FROM `strana`
") or die(mysql_error());
    while ($rowstr = mysql_fetch_array($resstr)) {
        $strid[$rowstr[\'st_id\']]=$rowstr[\'st_id\'];
}
$resrek=mysql_query("
SELECT `re_id`, `re_nazvanie`
FROM `reklama`
") or die(mysql_error());
    while ($rowrek = mysql_fetch_array($resrek)) {
        $rekid[$rowrek[\'re_id\']]=$rowrek[\'re_id\'];
}
// собираю страны и издания, дальше запрос к базе основной


$res=mysql_query("
SELECT *
FROM `zvonki`
LEFT JOIN `reklama` ON `re_id`=`zv_reklama_ist`
LEFT JOIN `strana` ON `st_id`=`zv_strana
ORDER BY  re_id, st_id
") or die(mysql_error());
while ($row = mysql_fetch_array($res)) {

$r1=$row[\'re_id\']; // ставлю одну переменную
    if ($row[\'re_id\']==$rekid[$row[\'re_id\']]) {
        if ($row[\'st_id\']==$strid[$row[\'st_id\']]) {

$VYVOD.=\'
 
    \'.$row[\'re_nazvanie\'].\'
    \'.$row[\'st_list\'].\'
    \'.$row[\'zv_summa\'].\'
  \';
 
$r2=$row[\'re_id\']; // ставлю вторую переменную
        }
    }
}

$VYVOD.=\'
 
    Итог:
   
    \'.$summa.\'
  \';
Название: разбивка вывода
Отправлено: граф от 03 Декабря 2008, 17:40:57

    if ($row[\'re_id\']==$rekid[$row[\'re_id\']]) {
        if ($row[\'st_id\']==$strid[$row[\'st_id\']]) {

это разсортирует их сначала по изданию, а потом по стране.

а это вывод всех в конце. $VYVOD.=\'
 
    Итог:
   
    \'.$summa.\'
  \';


вот какой раслад на данный момент

журнал1 сумма
итог журнал1 сумма
журнал1 сумма
журнал1 сумма
журнал1 сумма
журнал1 сумма
журнал2 сумма
итог журнал2 сумма
журнал2 сумма
журнал2 сумма
журнал2 сумма
журнал2 сумма
журнал3 сумма
итог журнал3 сумма
журнал3 сумма
журнал3 сумма
журнал3 сумма
журнал3 сумма

а нужно вот так:

журнал1 сумма
журнал1 сумма
журнал1 сумма
журнал1 сумма
журнал1 сумма
итог журнал1 сумма
журнал2 сумма
журнал2 сумма
журнал2 сумма
журнал2 сумма
журнал2 сумма
итог журнал2 сумма
журнал3 сумма
журнал3 сумма
журнал3 сумма
журнал3 сумма
журнал3 сумма
итог журнал3 сумма

а там еще и по стране разбить надо будет. мне бы принцип с изданием понять .. со страной думаю так же будет..
Название: разбивка вывода
Отправлено: APL от 03 Декабря 2008, 18:02:38
ну и пихайте итог где нужно... в чем проблема?
код ваш протестить не могу... лениво базу делать такую :)

а что мешает считать количество одинаковых городов, журналов и еще какой-то хрени? например так:

select field, count(field) from table group by field order by binary(field) ASC

где filed это поле, а table таблицо

по запросу будет выдано список значений поля в алфавитном порядке и количество записей с таким значением
Название: разбивка вывода
Отправлено: hanslinger от 03 Декабря 2008, 18:04:58
не нужно вываливать код
не нужно о нем даже думать

надо просто понять — что у тебя есть, какими признаками обладает и что ты хочешь получить в итоге. напиши это словами. подробно, по шагам. и поймешь, что форум тебе нахер не нужен и ты все сделаешь сам.
Название: разбивка вывода
Отправлено: граф от 03 Декабря 2008, 18:14:34
Цитировать
APL:
а что мешает


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



Цитировать
hanslinger:
все сделаешь сам

ну до этого надо дорасти. опыта набраться. да и книжек много прочитать. вот лет через 5, думаю уже без форума обойтись смогу. если доживу. староват я уже что бы такие большие объемы информации слету улавливать.. это молодежь на раз два как орехи
так что увы.
Название: разбивка вывода
Отправлено: APL от 03 Декабря 2008, 18:25:20
опять же почему бы не посчитать запросом...

select town, sum(price) from table group by town

где price - поле цены, town - поле по которому группируем (например город)

в примере на выводе получим список городов и сумму цен в этом городе

если запросом по каким-то причинам нельзя, то плюсуй в переменные

а вообще научайся грамотно формулировать задание... врядли кто-то будет долго врубаться в маловразумительные каменты... представь что ты разговариваешь с роботами и формулируй максимально точно и абстрактно...

P.S. я тоже не совсем молодеж :) а вообще, зачем вы занялись программированием? думаю что это не ваше :)
Название: разбивка вывода
Отправлено: граф от 03 Декабря 2008, 18:30:11
Цитировать
APL:
научайся грамотно формулировать

ну вобщем это самое сложное.

Цитировать
APL:
думаю что это не ваше


вот и я думаю. это последнее что я сделаю в области програмирования. больше на уговоры не поведусь.
Название: разбивка вывода
Отправлено: APL от 03 Декабря 2008, 18:33:47
крайний мой пример запроса вас устроил? решает задачу?
Название: разбивка вывода
Отправлено: hanslinger от 03 Декабря 2008, 18:39:54
да нахрен книги
тут дело не в программировании и не в базах данных
дело в постановке задачи и способе ее решения
Название: разбивка вывода
Отправлено: граф от 03 Декабря 2008, 18:42:29
Цитировать
APL:
решает задачу?


возможно он и решает, но я не со всеми терминами запросов знаком! а посему более короткий путь, это тот который знаешь, если я пойду по вашему пути это еще бОльшие дебри для меня.

Цитировать
hanslinger:
дело в постановке задачи

как мне определить ключ - который будет следить за сменой каталогов?
Название: разбивка вывода
Отправлено: APL от 03 Декабря 2008, 18:46:45
Цитировать
граф:
возможно он и решает, но я не со всеми терминами запросов знаком! а посему более короткий путь, это тот который знаешь, если я пойду по вашему пути это еще бОльшие дебри для меня.


ну тогда и не знаю... я привел самы простой пример с комментариями :) проще просто невозможно
Название: разбивка вывода
Отправлено: hanslinger от 03 Декабря 2008, 18:56:55
черт побери
какой ключ

расписываешь: "у меня есть объекты А, Б и В"
объект А бывает синий, зеленый и черный
объект Б — мягкий или твердый
В — круглый, квадратный, треугольный или многоугольный
грубо говоря

рисуются на бумажке все варианты
к ним рисуются стрелочки, что да как связывается
а потом задается вопрос "у меня есть ла-ла-ла с такими-то характеристиками, как мне составить запрос к таблицам, в которых это ла-ла-ла хранится, для того, чтобы получить ба-ба-ба в таком-то виде".
и все.
Название: разбивка вывода
Отправлено: граф от 03 Декабря 2008, 19:05:24
а потом отсканировать и сюда повесить?:) право смешно!
если уж не хотите оказать любезность, не трясите воздух попусту.

в выше приведенном примере меня интересует одно, как мне отловить смену id  у страны. этого мне будет достаточно что бы выполнить требуемую задачу
Название: разбивка вывода
Отправлено: APL от 03 Декабря 2008, 19:11:13
НУ ГОВОРИМ ЖЕ - ОПИШИТЕ ЗАДАЧУ АБСТРАКТНО И ВМЕСТО "ЦЕНА" ИЛИ "ФИГОВИНА" ПИШЕМ "ПОЛЕ 1 ТИПА DOUBLE", "ПОЛЕ 2 ТИПА VARCHAR(255)"

и нужно узнать:

1. в чем смысл жизни
2. кому на руси жить хорошо
3. кто виноват
4. что делать

P.S. можно не сканировать, можно в paint\'е нарисовать! :))))
Название: разбивка вывода
Отправлено: hanslinger от 03 Декабря 2008, 19:14:02
взялся за гуж — полезай в кузовок
не умеешь программировать и не собираешься учиться — плати бабло, чтобы сделали
хочешь учиться — учись и спрашивай советов по процессу обучения, а не проси готовых решений
Название: разбивка вывода
Отправлено: APL от 03 Декабря 2008, 19:17:33
гыыыыы не могу.... убейте меня обо что-нить!


вам нужно только отловить смену id???? пожалуйста!
отлавливать смену id можно единственным способом - сравнением старого и нового id!!!!!!!!!!! другого способа науке не известно

вот вам готовое решение:
if (old_id != new_id) {

}
Название: разбивка вывода
Отправлено: граф от 03 Декабря 2008, 19:21:48
:))))))))))))


while ($row = mysql_fetch_array($res)) {


    if ($row[\'re_id\']==$rekid[$row[\'re_id\']]) {
$p1=$row[\'re_id\'];
        if ($row[\'st_id\']==$strid[$row[\'st_id\']]) {

$VYVOD.=\'
 
    \'.$row[\'re_nazvanie\'].\'
    \'.$row[\'st_list\'].\'
    \'.$row[\'zv_summa\'].\'
  \';

}
}
}
 
как мне определить отловить или понять когда

$p1
изменилась?
Название: разбивка вывода
Отправлено: APL от 03 Декабря 2008, 19:25:20

$p_old = \'\';
while ($row = mysql_fetch_array($res)) {


    if ($row[\'re_id\']==$rekid[$row[\'re_id\']]) {
$p1=$row[\'re_id\'];





if ( $p1 != $p_old ) {
ИЗМЕНИЛОСЬ!

}
$p_old = $p1;







        if ($row[\'st_id\']==$strid[$row[\'st_id\']]) {

$VYVOD.=\'
 
    \'.$row[\'re_nazvanie\'].\'
    \'.$row[\'st_list\'].\'
    \'.$row[\'zv_summa\'].\'
  \';

}
}
}
Название: разбивка вывода
Отправлено: граф от 03 Декабря 2008, 19:57:40
опять не правильно вопрос поставил..
тут в этом ответе она впереди бежит переменная... как бы правильно-то разъяснить..
вот в этом посте получается то, что вы сейчас написали
http://forums.webscript.ru/showthread.php?s=&postid=153741#post153741
именно вывод итога после первого входа в цикл.
Название: разбивка вывода
Отправлено: APL от 03 Декабря 2008, 20:03:03
мляяяяяяяяяяяяяяяяя

забейте на задачу и верните заказчику деньги! :)
если жалко денег, то купите книгу "php для чайников" и выучите ее наизусь. Все! Я ушел домой
Название: разбивка вывода
Отправлено: ravshaniy от 06 Декабря 2008, 12:22:46
пхп для чайников здесь не поможет. технологичность разработки отсутсвует.
работа графа:
цикл(
 человек пишет,
 получает ошибочный результат
 иф(нужна идея)пишет в форум
}

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

это то что касается технологии разработки.

теперь системный подход к решению задачи.
уровень данных и уровень представления нужно разделить.
уровень представления предполагает готовый шаблон представления и формализованный тип данных на вход

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

старайтесь при решении задачи определить стратегию решения раньше вариантов реализации
Название: разбивка вывода
Отправлено: ravshaniy от 06 Декабря 2008, 12:24:58
если вы ничего не поняли из вышенаписаного, постарайтесь найти себя в другой области либо не беритесь за сложные задачи и ждите пять лет и более лет пока не поймете что здесь написано

если поняли
Цитировать
граф:
а как так ему объяснить?


до цикла объявляете переменную с пустым значением. в цикле сравниваете эту переменную со значением ид_месяца

иф(переменная соответствует ид_месяца){
все еще тотже месяц
выполняете блок для текущего месяца
}
елс{
начался новый месяц.
выполняете блок для инициализации нового месяца
и выравниваете значения переменной для проверки
}

под циклом в данном случае понимается цикл вытаскивающий построчно записи из бд
Название: разбивка вывода
Отправлено: hanslinger от 07 Декабря 2008, 01:32:09
чувак, из «вышенаписанного» ни один нормальный человек ничего не поймет
это бред для бородатых уебанов, которые называют себя программистами

четкость мысли отсутствует наглухо
Название: разбивка вывода
Отправлено: граф от 10 Декабря 2008, 17:55:15
hanslinger не льсти себе..
Название: разбивка вывода
Отправлено: граф от 10 Декабря 2008, 17:56:38
ravshaniy
спасиббо за попытку, все давно решено..
Название: разбивка вывода
Отправлено: CGVictor от 13 Декабря 2008, 23:40:20
[moderatorial]
Так, ребят. Наговорились. Тему я прикрою.
Но флуд на пустом месте - как от автора, так и от уважаемых людей...