X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> PHP + сложный запрос в PostgeSQL
cobra2029
cobra2029
Topic Starter сообщение 2.3.2012, 13:38; Ответить: cobra2029
Сообщение #1


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

Итак, начну с описания задачи:

Имеется сервер, на нём крутится база PostgreSQL (объем базы порядка 4tb).
Структура базы следующая:
Таблици:
ObjectLog1
..................
ObjectLog1000
..................
ObjectLogN


object_ip

всю структуру описывать не имеет смысла. Каждая таблица ObjectLog является контейнером для данных по 1-му объекту (в данный момент объектов всего 27567 (т.е. ObjectLog1 - ObjectLog27567), количество объектов растёт каждый день).
из каждой таблици ObjectLog меня интересует только колонка Data,
вот sql скрипт для выборки из одной таблици:
SELECT "Date" FROM "public"."ObjectLog1" ORDER BY "Date" DESC LIMIT 1



таблица object_ip имеет вид (понятно что не выкладываю все записи, не имеет смысла):

"id" int4 DEFAULT NULL NOT NULL,
"addr" inet DEFAULT NULL,
CONSTRAINT "pk_object_ip" PRIMARY KEY ("id")
)
WITH OIDS
;

ALTER TABLE "public"."object_ip" OWNER TO "postgres";



CREATE INDEX "object_ip_index" ON "public"."object_ip" USING btree ("addr");

ALTER INDEX "object_ip_index" OWNER TO "object_ip";;

-- ----------------------------
-- Records of object_ip
-- ----------------------------
INSERT INTO "object_ip" VALUES ('1', '10.145.22.25');


Теперь логическая связь:
имя каждой таб. ObjectLog содержит в себе порядковый номер объекта (пример ObjectLog1 );
В таб. object_ip, каждая строка несет информацию об ip адресе объекта:

-- ----------------------------
-- Records of object_ip
-- ----------------------------
INSERT INTO "object_ip" VALUES ('1', '10.145.22.25');

запись: ('1', '10.145.22.25') подразумевает что объекту 1 (таблица ObjectLog1) соответствует ip 10.145.22.25.

Итак, что должно получиться:

на экран выводится информация в виде таблицы, отсортированная по последней дате, в таком виде (так я себе представляю):

Объект Дата и время последней записи ip адресс


объект1 2012-02-27 19:51:48 10.1.100.89
объект2 2012-02-27 20:51:48 10.1.100.88
................................................................................
............................................

объектN 2012-03-01 04:01:48 10.10.69.14



Теперь сами вопросы:

1. как мне узнать сколько всего таблиц ObjectLog ?
2. как создать sql скрипт, который будет выводить последнюю дату по каждой из существующей таблицы ObjectLog ?
3. как выводить на экран "связку" объект1 2012-02-27 19:51:48 10.1.100.89 ?

Заранее спасибо за помощь.

P.S. не предлагать изменить структуру базы, это не реально
P.S.2. я не прошу сделать все за меня (хотя нет, вру: прошу сделать 2-й скрипт).
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
cobra2029
cobra2029
Topic Starter сообщение 2.3.2012, 18:15; Ответить: cobra2029
Сообщение #2


собственно вот чего добился

$conn = pg_connect("host=10.1.0.1 dbname=xxx user=postgres") or die("Не соединилось!!!");

if (!$conn) {
  echo "Произошла ошибка.n";
  exit;
}
// используя  файлы
//$data1 = file_get_contents('data.txt');
//$data2 = file_get_contents('ip.txt');
//$data3 = file_get_contents('name.txt');

$s = pg_query("SELECT COUNT(*) FROM information_schema.tables");
$i = pg_fetch_array($s);
// првоерим что выводится
//echo $i[0] . "n";
$x=$i[0];
// првоерим что выводится
//echo $x;
for ( $z=1; $z<=$x; $z++) {

// Экранирование спецсимволов в строке
  //$escaped1 = pg_escape_string($data1);
// $escaped2 = pg_escape_string($data2);
  //$escaped3 = pg_escape_string($data3);
  
  /* Выполнение SQL запроса */
$result1 = pg_query("SELECT "Date" FROM "public"."ObjectLog". $z ."" ORDER BY "Date" DESC LIMIT 1;");
$result2 = pg_query("SELECT * FROM "public"."object_ip" ORDER BY "id" ");
$result3 = pg_query("SELECT * FROM information_schema.tables WHERE table_type='BASE TABLE' and table_name='ObjectLog". $z ."'");
// првоерим что выводится
//$b = pg_fetch_array($result3);
//echo $b[0] . "n";
//echo $b[1] . "n";
//echo $b[2] . "n";
if (!$result1) {
  echo "Произошла ошибка.n";
  exit;
}
if (!$result2) {
  echo "Произошла ошибка.n";
  exit;
}
if (!$result3) {
  echo "Произошла ошибка.n";
  exit;
}
  echo "
";
  echo "
n";
echo "";

  echo "";
  echo "";

    echo "";

echo "";

while (($row = pg_fetch_row($result1))&&($pow = pg_fetch_row($result2)) && ($wow = pg_fetch_row($result3)) ){
echo "";

echo "";

  echo "";
  echo "";

echo "";
}
echo "                                        ";
                  echo"Объект";
                echo "                            ";
                  echo"Дата последней записи";
                  echo"                            ";
                  echo"IP Адресс";
                  echo"                                            ";
                  echo"$wow[2]";
                echo "                            ";
                  echo"$row[0]";
                echo "                            ";
                  echo "$pow[1]";
                  echo"            
";
}
pg_close($conn);
?>


теперь вопрос:
как исключить из этого запроса $result1 = pg_query("SELECT "Date" FROM "public"."ObjectLog". $z ."" ORDER BY "Date" DESC LIMIT 1;"); объекты которых нет?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
cobra2029
cobra2029
Topic Starter сообщение 3.3.2012, 13:21; Ответить: cobra2029
Сообщение #3


проблема не решена... ну натолкните на мысль хотя бы в какую сторону копать???
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
cobra2029
cobra2029
Topic Starter сообщение 16.3.2012, 12:03; Ответить: cobra2029
Сообщение #4


актуально
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
DioNiR
DioNiR
сообщение 16.3.2012, 13:06; Ответить: DioNiR
Сообщение #5


в смысле объекты которых нет?


Прочитал первый пост вроде допер до последнего вопроса.

pg_query("SELECT \"Date\" FROM \"public\".\"ObjectLog". $z ."\" ORDER BY \"Date\" DESC LIMIT 1;");



Скрипт вроде как выдаст ошибку если такой таблицы не будет
Что мешает этим воспользоваться?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
cobra2029
cobra2029
Topic Starter сообщение 16.3.2012, 14:54; Ответить: cobra2029
Сообщение #6


DioNiR, собственно если есть ошибка он останавливает работу и пишет об ошибке, не могу пока, что догнать как эту ошибку отловить и только после этого формировать таблицу.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
DioNiR
DioNiR
сообщение 16.3.2012, 15:02; Ответить: DioNiR
Сообщение #7


а что тут догонять:

if (!$result1) {
  echo "Произошла ошибка.n";
  exit;
}


Собственно и есть твоя ошибка, и остановка скрипта.

Но если написать вот так:
if (!$result1) {
  continue;
}

То если не будет таблицы, скрипт перейдет к следующему номеру циклу.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
cobra2029
cobra2029
Topic Starter сообщение 5.4.2012, 9:57; Ответить: cobra2029
Сообщение #8


это замечательно и понятно а как быть с вот такой ошибкой?
"Warning: pg_query() [function.pg-query]: Query failed: ERROR: relation "public.ObjectLog224" does not exist in W:serversystemhtmlindex.php on line 38"

как избавиться от вывода её на экран?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
c0ns0l3
c0ns0l3
сообщение 5.4.2012, 14:59; Ответить: c0ns0l3
Сообщение #9


display error's?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
cobra2029
cobra2029
Topic Starter сообщение 12.4.2012, 9:40; Ответить: cobra2029
Сообщение #10


приведите пример использования.

Заранее спасибо.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Запрос на бесплатные полезности
7 Tia2 1975 23.3.2024, 11:27
автор: Alexand3r
Открытая тема (нет новых ответов) СОЗДАНИЕ : / САЙтЫ / ЛЕНДЫ / БОТЫ ТГ / ВАЙТЫ / КРЕО / СОФТЫ / ДИЗАЙН [PHP, JS, HTML/CSS] и другое
5 CULA 3418 19.12.2023, 18:55
автор: CULA
Открытая тема (нет новых ответов) Услуги по созданию и доработке скриптов PHP, MySQL, JavaScript, jQuery
Разработка сайтов и сервисов под-ключ
0 alexey 1243 24.11.2023, 14:46
автор: alexey
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыВеб-разработка (HTML5, CSS3, JavaScript, jQuery, Ajax, PHP)
56 qpPeW 44929 19.7.2023, 10:03
автор: qpPeW
Открытая тема (нет новых ответов) Есть спецы по php/laravel?
3 Mixatraider 1891 26.5.2023, 20:48
автор: Mixatraider


 



RSS Текстовая версия Сейчас: 24.4.2024, 11:09
Дизайн