Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.09.2011, 12:41   #11
Dmitry1983
Пользователь
 
Регистрация: 24.06.2011
Сообщений: 80
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Да уж, структура БД у вас капец....
А почему не получилось переделать?

Нормальная структура таблицы была бы примерно такой:
name - region1, region2, ... (index)
type - all, go, mr (index)
kolvo_ms
ms_high
ms_med
ms_no

Тогда выборки свелись бы к простым запросам всех записей по type, ORDER BY name.

По текущим таблицам - это сделать довольно сложно.
А вы можете выложить дамп 2-3 таблиц region - чтоб можно было попробовать, а то лениво руками создавать/забивать данные?
Тогда я смогу покрутить это в течении дня.
спасибо за помощь) такая структура, безусловно есть... НО! чтобы получить такую таблицу приходится делать кучу геморроя (своды пересводы) в excel... просто хочется попробовать делать сводные таблицы через mysql и php)))
файлики вложил кроме конф)
если будут идеи или советы... буду признателен...
да и если можно было бы пообщаться по icq или skype
Вложения
Тип файла: zip test4.sql.zip (907 байт, 6 просмотров)
Dmitry1983 вне форума Ответить с цитированием
Старый 06.09.2011, 12:42   #12
Dmitry1983
Пользователь
 
Регистрация: 24.06.2011
Сообщений: 80
По умолчанию

а вот плоды творчества)
Вложения
Тип файла: zip index.zip (1.4 Кб, 5 просмотров)
Dmitry1983 вне форума Ответить с цитированием
Старый 06.09.2011, 12:46   #13
Dmitry1983
Пользователь
 
Регистрация: 24.06.2011
Сообщений: 80
По умолчанию

а вообще походу надо при переборке элементов делать просто двухмерный массив...
вот что надо будет щас попробовать...
Dmitry1983 вне форума Ответить с цитированием
Старый 06.09.2011, 12:55   #14
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Dmitry1983 Посмотреть сообщение
а вообще походу надо при переборке элементов делать просто двухмерный массив...
вот что надо будет щас попробовать...
Возможно, лучше будет разбить данные на несколько массивов по типам: all, go, mr...
Отписал вам в ЛС.
Andkorol вне форума Ответить с цитированием
Старый 06.09.2011, 17:18   #15
Dmitry1983
Пользователь
 
Регистрация: 24.06.2011
Сообщений: 80
По умолчанию

PHP код:
<?php

if (!empty($_POST['menu']))

{

$criteria=$_POST['menu'];

for (
$i=0;$i<count($name);$i++)
{

if (
preg_match("|region|",$name[$i]))
{

$query="Select * from $name[$i] where pokazatel='name'";
$result=mysql_query($query);
$daa mysql_fetch_row ($result);

$in="'$criteria','ms_high','ms_med','ms_no'";


$query2="Select * from $name[$i] where pokazatel IN (".$in.")";
$result2=mysql_query($query2);


$row = array();

while (
$res=mysql_fetch_row($result2))
{
$row[]= $res[0];
}
echo 
"В Таблице ".$name[$i]."<br.";
echo 
"В переменной row".count($row)." элементов<br>";


for (
$b=0;$b<count($row);$b++)
{
echo 
"Переменная row[".$b."]: ".$row[$b]."<br>";
}


for (
$g=0;$g<count($row);$g++)
{

mysql_data_seek($result2$g);
$sub=array(array(array()));
$row2=array(array());
$field = array();

$res2=mysql_fetch_row($result2);
for (
$z=0;$z<mysql_num_fields($result2);$z++)
{
$field[]= $res2[$z];
}

for (
$f=0;$f<count($field);$f++)
{
$row2[$g][$f]=$field[$f];
}


echo 
"В Таблице ".$name[$i]."<br.";
echo 
"В переменной field".count($field)." элементов<br>";
echo 
"В переменной row2 ".count($row2)." элементов<br>";

for (
$x=0;$x<count($field);$x++)
{
echo 
"Переменная field[".$x."]: ".$field[$x]."<br>";
}
for (
$p=0;$p<count($row);$p++)
{
for (
$z=0;$z<count($field);$z++)
{
if (!empty(
$row2[$p][$z]))
{
echo 
"Переменная row2"."[".$p."]"."[".$z."] равна:".$row2[$p][$z]."<br>";
}
}
}

$sub[$i][$g][$f] = $row2[$p][$z];

for (
$q=0;$q<count($name);$q++)
{
for (
$e=0;$e<count($row);$e++)
{
for (
$r=0;$r<count($field);$r++)
{
echo 
"Итоговая переменная равна:".$sub[$q][$e][$r]."<br>";
}
}
}

}
}
}
}

?>
полный П... в общем мое знакомство с многомерным массивом особого успеха не принесло пока(((

идея сделать переменную-массив $sub с тремя параметрами [region][строка][поле] и уже к ним потом обращаться. по идее это должно все решить...
Dmitry1983 вне форума Ответить с цитированием
Старый 06.09.2011, 17:33   #16
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Dmitry1983 Посмотреть сообщение
полный П... в общем мое знакомство с многомерным массивом особого успеха не принесло пока(((

идея сделать переменную-массив $sub с тремя параметрами [region][строка][поле] и уже к ним потом обращаться. по идее это должно все решить...
Там всё проще, чем вы думаете...
Вот примерный код, на основании приведенных вами дампов данных:
PHP код:
$data = array();
// список таблиц, из которых идет выборка
$tables = array('region1''region2''region3''region4''region5''region6');

for(
$i 0$i count($tables); $i++){
    
$res mysql_query("SELECT * FROM `{$tables[$i]}`");
    if(
mysql_num_rows($res) > 0){
        while(
$row mysql_fetch_assoc($res)){
            if(
$row['pokazatel'] == 'name'){
                
$data[$i]['name'] = $row['all'];// получили регион
            
}
            else{
                foreach(
$row as $key => $value){
                    if(
$key != 'pokazatel'$data[$i][$row['pokazatel']][$key] = $value;
                }
            }
        }
    }
}
var_dump($data); 
Этот код формирует массив вида:
Код:
array
  0 => 
    array
      'name' => string 'Тульская область' (length=31)
      'kolvo_mo' => 
        array
          'all' => string '255' (length=3)
          'go' => string '10' (length=2)
          'mr' => string '15' (length=2)
          'gp' => string '100' (length=3)
          'sp' => string '130' (length=3)
      'kolvo_ms' => 
        array
          'all' => string '1500' (length=4)
          'go' => string '900' (length=3)
          'mr' => string '100' (length=3)
          'gp' => string '150' (length=3)
          'sp' => string '250' (length=3)
      'ms_high' => 
        array
          'all' => string '1000' (length=4)
          'go' => string '800' (length=3)
          'mr' => string '80' (length=2)
          'gp' => string '100' (length=3)
          'sp' => string '200' (length=3)
      'ms_med' => 
        array
          'all' => string '189' (length=3)
          'go' => string '111' (length=3)
          'mr' => string '24' (length=2)
          'gp' => string '37' (length=2)
          'sp' => string '29' (length=2)
      'ms_no' => 
        array
          'all' => string '34' (length=2)
          'go' => string '17' (length=2)
          'mr' => string '10' (length=2)
          'gp' => string '3' (length=1)
          'sp' => string '4' (length=1)
  1 => 
    array
      'name' => string 'Тульская область1' (length=31)
      'kolvo_mo' => 
        array
          'all' => string '255' (length=3)
          'go' => string '10' (length=2)
          'mr' => string '15' (length=2)
          'gp' => string '100' (length=3)
          'sp' => string '130' (length=3)
      'kolvo_ms' => 
        array
          'all' => string '1500' (length=4)
          'go' => string '900' (length=3)
          'mr' => string '100' (length=3)
          'gp' => string '150' (length=3)
          'sp' => string '250' (length=3)
      'ms_high' => 
        array
          'all' => string '1000' (length=4)
          'go' => string '800' (length=3)
          'mr' => string '80' (length=2)
          'gp' => string '100' (length=3)
          'sp' => string '200' (length=3)
      'ms_med' => 
        array
          'all' => string '189' (length=3)
          'go' => string '111' (length=3)
          'mr' => string '24' (length=2)
          'gp' => string '37' (length=2)
          'sp' => string '29' (length=2)
      'ms_no' => 
        array
          'all' => string '34' (length=2)
          'go' => string '17' (length=2)
          'mr' => string '10' (length=2)
          'gp' => string '3' (length=1)
          'sp' => string '4' (length=1)
.... и т.д.
В принципе - получаем вполне удобный доступ в цикле к данным по ключам:
$data[$i]['name'] - это ваш регион
$data[$i]['ms_no']['all']
$data[$i]['ms_no']['go'] - доступ к данным в группе ms_no
Andkorol вне форума Ответить с цитированием
Старый 06.09.2011, 18:04   #17
Dmitry1983
Пользователь
 
Регистрация: 24.06.2011
Сообщений: 80
По умолчанию

Andkorol, спасибо! щас буду разбираться! отпишусь через час!

а пока сам упростил так.. но как имя таблицы к этому присобачить...
PHP код:
<table border="1">
<?php
if (!empty($_POST['menu']))
{
$criteria=$_POST['menu'];
for (
$i=0;$i<count($name);$i++)
{
if (
preg_match("|region|",$name[$i]))
{
$query="Select * from $name[$i] where pokazatel='name'";
$result=mysql_query($query);
$daa mysql_fetch_row ($result);
echo 
"Название таблицы: ".$name[$i]."<br>";
$in="'$criteria','ms_high','ms_med','ms_no'";
$query2="Select * from $name[$i] where pokazatel IN (".$in.")";
$result2=mysql_query($query2);
$rows=mysql_num_rows($result2);
$fields=mysql_num_fields($result2);
for (
$t=0;$t<$rows;$t++)
{
echo 
"<tr><td>$name[$i]</td>";
for (
$z=0;$z<$fields;$z++)
{
echo 
"<td>".mysql_result($result2,$t,$z)."<br></td>";
}
echo 
"</tr>";
}
}
}
}
?>
</table>

вот что получается)
Dmitry1983 вне форума Ответить с цитированием
Старый 06.09.2011, 19:58   #18
Dmitry1983
Пользователь
 
Регистрация: 24.06.2011
Сообщений: 80
По умолчанию

Огромное спасибо, Andkorol!
отличный кейс получился! все работает великолепно!
Dmitry1983 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматический перенос строк из одного листа в другой лист Результат maksvas Microsoft Office Excel 4 22.10.2010 14:03
Выборки из бд Lokos БД в Delphi 6 15.12.2009 15:20
Добавление в результат запроса пустых строк BARNEY БД в Delphi 5 11.11.2009 12:26
Какое программирование в наше время более востребовано и более рентабельно? iukash Свободное общение 18 29.10.2009 13:02
Выгрузка более 65000 строк Xozer Microsoft Office Excel 4 01.02.2008 22:09