Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Baza MariaDB REST servis u PHP

[es] :: MySQL :: Baza MariaDB REST servis u PHP

[ Pregleda: 3049 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

galenit
Milenko-Mikan Petrovic
32206 Kamenica

Član broj: 61242
Poruke: 25
*.static.isp.telekom.rs.



Profil

icon Baza MariaDB REST servis u PHP05.04.2018. u 12:15 - pre 72 meseci
REST servis puni tabelu MASINE hteo bih da se odmah podaci razdvajaju u vise tabela M1 ,M2, .... M10 pokusao sam to da uradim sa trigerima ali MariaDB ne podrzava multiple triggers . Na koji nacin organizovati da resenje bude optimalno jer u pitanju je web server instaliran na PI RASPBERRY a ocekivani broj zapisa je do 200000 i to bih podelio na vise manjih tabela .
 
Odgovor na temu

nkrgovic
Nikola Krgović
Beograd

Član broj: 3534
Poruke: 2807

ICQ: 49345867
Sajt: https://www.twinstarsyste..


+655 Profil

icon Re: Baza MariaDB REST servis u PHP05.04.2018. u 13:29 - pre 72 meseci
Ne bi bilo lose da malo pojasnis to sto radis, tipa moze li taj servis da se izmeni, moze li da se ubaci stored procedura, mora li Maria....

Iz ovoga sto si dao kao informacije i requirements, mozda da stavis partitioning, po primarnom kljucu?
Please do not feed the Trolls!

Blasphemy? How can I blaspheme? I'm a god!'
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Baza MariaDB REST servis u PHP05.04.2018. u 13:38 - pre 72 meseci
Zašto bi razbijao na manje tabele? 200k slogova nije mnogo.
 
Odgovor na temu

galenit
Milenko-Mikan Petrovic
32206 Kamenica

Član broj: 61242
Poruke: 25
*.static.isp.telekom.rs.



Profil

icon Re: Baza MariaDB REST servis u PHP05.04.2018. u 14:37 - pre 72 meseci
Ocitavaju se podaci sa 10 masina i pakuju u tabelu tab_masine na REST servisu (insert) u tabeli ima polje br_masine (1 - 10 ) na prijemu ima 10 tabela M1,M2 ,M3 ..M10 koje odgovaraju broju masine .Bitno je u realnom vremenu puniti pojedinacne tabele kako podaci dolaze .Bilo koji nacin moze da bi se to uradilo bilo izmena servisa REST.php ili u samoj bazi MariaDB (trigeri ,stored procedure , SQL komande ) Ne mogu da promenim baza je MariaDB , treba posebne tabele M1,M2 ...

evo REST servis :


Code:

<?php
 
// get the HTTP method, path and body of the request
$method = $_SERVER['REQUEST_METHOD'];
$request = explode('/', trim($_SERVER['PATH_INFO'],'/'));
$input = json_decode(file_get_contents('php://input'),true);
 
// connect to the mysql database
$link = mysqli_connect('77.46.215.36', 'baza_masine', 'mas_132', 'tab_masine');
mysqli_set_charset($link,'utf8');
 
// retrieve the table and key from the path
$table = preg_replace('/[^a-z0-9_]+/i','',array_shift($request));
$key = array_shift($request)+0;


for ($j=0;$j<count($input['events']);$j++) {

    // escape the columns and values from the input object
    $columns = preg_replace('/[^a-z0-9_]+/i','',array_keys($input['events'][$j]));
    $values = array_map(function ($value) use ($link) {
      if ($value===null) return null;
      return mysqli_real_escape_string($link,(string)$value);
    },array_values($input['events'][$j]));
     
    // build the SET part of the SQL command
    $set = '';
    for ($i=0;$i<count($columns);$i++) {
      $set.=($i>0?',':'').'`'.$columns[$i].'`=';
      $set.=($values[$i]===null?'NULL':'"'.$values[$i].'"');
    }
     
    // create SQL based on HTTP method
    switch ($method) {
      case 'GET':
        $sql = "select * from `$table`".($key?" WHERE id=$key":''); break;
      case 'PUT':
        $sql = "update `$table` set $set where id=$key"; break;
      case 'POST':
       $sql = "insert into `$table` set $set "; break;
      .....................................






[Ovu poruku je menjao galenit dana 06.04.2018. u 16:09 GMT+1]
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Baza MariaDB REST servis u PHP05.04.2018. u 15:28 - pre 72 meseci
Nisi odgovorio na moje pitanje.

Takođe, koristi [code] tagove kad pejstuješ kod.
 
Odgovor na temu

galenit
Milenko-Mikan Petrovic
32206 Kamenica

Član broj: 61242
Poruke: 25
*.static.isp.telekom.rs.



Profil

icon Re: Baza MariaDB REST servis u PHP05.04.2018. u 18:09 - pre 72 meseci
Odgovorio sam da trebaju posebne tabele M01,M02 ... to ne zavisi od mene ,tagove za kod sam preskocio izvinjavam se (ima lep primer REST servisa koji radi) samo od konkretnog odgovora nema nista
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: Baza MariaDB REST servis u PHP05.04.2018. u 19:56 - pre 72 meseci
ne koristis ti marijin rest servis niti ovo pitanje ima ikakve veze sa mysql-om (mariadb-om) ... taj php treba da napises da radi ono sto hoces (sta god da hoces posto nisi jasan sta hoces)
 
Odgovor na temu

galenit
Milenko-Mikan Petrovic
32206 Kamenica

Član broj: 61242
Poruke: 25
*.static.isp.telekom.rs.



Profil

icon Re: Baza MariaDB REST servis u PHP05.04.2018. u 20:06 - pre 72 meseci
Hvala u svakom slucaju .Mozda nisam dobro objasnio ja imam PHP REST servis i trazio sam pomoc kako da podatke koji dolaze podelim u vise tabela sta je bolje resenje da se uradi bolje PHP REST servis ili da u toku punjenja tabele preko trigera formiram pomocne tabele M01,M02 ...

nkrgovic mi je odgovorio da pokusam sa partitioning, po primarnom kljucu ali nisam uspeo . Potrazicu bolje resenje preko PHP REST servisa hvala svima koji su pokusali da pomognu
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2377 Profil

icon Re: Baza MariaDB REST servis u PHP05.04.2018. u 20:12 - pre 72 meseci
pa kakve to veze ima sa sql-om? dodju ti podaci "kako god" (kako ti
pricas sa svetom je abitno), ti onda te podatke spakujes, opet "kako
god" i onda te podatke insertujes de oces ... insert into kalakurcija
.... insert into kalakurcija1 ... etc ... zavisi kakva ti je data ...
pitanje ti je potpuno nejasno i ja bi reko na pogresnom mestu ... ne
kontam sta ti nije jasno kako da uradis?

- treba da uzmes datu od nekog klijenta (ti se kacis na njihov rest da
uzmes datu ili ti glumis rest server na koji oni salju datu)?

- treba tu datu da izparsiras

- treba tu datu da snimis i sql


koji od tri koraka ti nije jasan?
 
Odgovor na temu

nkrgovic
Nikola Krgović
Beograd

Član broj: 3534
Poruke: 2807

ICQ: 49345867
Sajt: https://www.twinstarsyste..


+655 Profil

icon Re: Baza MariaDB REST servis u PHP05.04.2018. u 22:13 - pre 72 meseci
Cekaj, ja mislim da sam konacno shvatio:

Tebi stize data sa 10 masina. Hoces da svaka masina ima svoju tabelu? To je fora?

Ako je to, onda batali bazu, particije i sve ostalo : Parsiraj input u samom PHP-u i na osnovu toga odluci gde ce data da ide (u koju tabelu), ne resava se to na nivou baze...
Please do not feed the Trolls!

Blasphemy? How can I blaspheme? I'm a god!'
 
Odgovor na temu

Zlatni_bg
Nikola S
Beograd

Član broj: 65708
Poruke: 4420
*.dynamic.sbb.rs.



+498 Profil

icon Re: Baza MariaDB REST servis u PHP06.04.2018. u 01:56 - pre 72 meseci
Ne vidim za sta ti ovde trebaju triggeri? Nisi objasnio konkretno sta je problem i kako bi da ga resis, ali apsolutno sam siguran da je SQL sintaksa najmanji problem ovde.

Trece, kako mislis da pravis M1... itd tabele pri novom upitu? Objasni malo sta predstavlja Mx i kada se kreira nova tabela. Ja sam ucen tako da je svako kreiranje nove tabele na nacin da ga upit preko servisa, a ne pri "instalaciji" aplikacije losa ideja. Nadam se da ne ide M1, M2... Mx.
THE ONLY EASY DAY WAS YESTERDAY
 
Odgovor na temu

galenit
Milenko-Mikan Petrovic
32206 Kamenica

Član broj: 61242
Poruke: 25
*.static.isp.telekom.rs.



Profil

icon Re: Baza MariaDB REST servis u PHP06.04.2018. u 08:04 - pre 72 meseci
E sad je puno bolje napravio sam guzvu losim objasnjenjima i predstavljanjem problema pokusacu jos da objasnim a mogu dati parametre za direktan pristup na PI RASPBERRY

Evo deo PHP koda koji prihvata ove podatke o masinama

Code:


 $set = '';
    for ($i=0;$i<count($columns);$i++) {
      $set.=($i>0?',':'').'`'.$columns[$i].'`=';
      $set.=($values[$i]===null?'NULL':'"'.$values[$i].'"');
    }
     
    // create SQL based on HTTP method
    switch ($method) {
      case 'GET':
        $sql = "select * from `$table`".($key?" WHERE id=$key":''); break;
      case 'PUT':
        $sql = "update `$table` set $set where id=$key"; break;
      case 'POST':
       $sql = "insert into `$table` set $set "; break;
      
      case 'DELETE':
        $sql = "delete `$table` where id=$key"; break;
    }



Ovi podaci stizu sa udaljenog mesta preko REST servisa i pakuju se u tabelu danas
Code:

     xxxxxx  xxx    xxx    MachineNo   status        vreme   
========================================================================
    (126638, NULL, NULL,     '2',         '1',     '2018-04-06 03:25:05'),
    (126639, NULL, NULL,     '3',         '1',     '2018-04-06 03:25:05'),
    (126640, NULL, NULL,     '4',         '1',     '2018-04-06 03:25:05'),
    (126641, NULL, NULL,     '5',         '1',     '2018-04-06 03:25:05'),
    (126642, NULL, NULL,     '6',         '2',     '2018-04-06 03:25:05'),
    (126643, NULL, NULL,     '7',         '3',     '2018-04-06 03:25:05'),
    (126644, NULL, NULL,     '8',         '4',     '2018-04-06 03:25:05'),
    (126645, NULL, NULL,     '1',         '1',     '2018-04-06 03:25:44'),
    (126646, NULL, NULL,     '2',         '1',     '2018-04-06 03:25:44'),
    (126647, NULL, NULL,     '3',         '1',     '2018-04-06 03:25:44'),
    (126648, NULL, NULL,     '4',         '1',     '2018-04-06 03:25:44'),
    (126649, NULL, NULL,     '5',        '1',     '2018-04-06 03:25:44'),
    (126650, NULL, NULL,     '6',         '1',     '2018-04-06 03:25:44'),
    (126651, NULL, NULL,     '7',         '3',     '2018-04-06 03:25:44'),
    (126652, NULL, NULL,     '8',         '4',     '2018-04-06 03:25:44'),
    (126653, NULL, NULL,     '1',         '2',     '2018-04-06 03:26:01'),
    (126654, NULL, NULL,     '2',         '1',     '2018-04-06 03:26:01'),
    (126655, NULL, NULL,     '3',         '1',     '2018-04-06 03:26:01'),
    (126656, NULL, NULL,     '4',         '1',     '2018-04-06 03:26:01'),
    (126657, NULL, NULL,     '5',        '1',     '2018-04-06 03:26:01'),
    (126658, NULL, NULL,     '6',         '1',     '2018-04-06 03:26:01'),
    (126659, NULL, NULL,     '7',         '3',     '2018-04-06 03:26:01'),



hteo sam istovremeno kako dolaze podaci da ih u isto vreme razvrstam u tabele M01,M02,... zavisno od broja masine .Tabele su unapred pripremljene i ne kreiraju se u toku pristizanja podataka

M01,M02 ....... M10 i za to sam napravio triger koji to radi


Code:


CREATE DEFINER=`automatika`@`%` TRIGGER `M02_before_insert` AFTER INSERT ON `danas` FOR EACH ROW if (NEW.MachineNo='2' ) then
INSERT INTO M02    SET MachineNo = NEW.MachineNo,StatusNo = NEW.StatusNo,Mac_Stat =concat(NEW.MachineNo,NEW.StatusNo), EventDate=NEW.EventDate,stop_time =NEW.EventDate  ;
end if



Ovo je radilo dobro za masinu br 2 i tabelu M02 a za ostale masine nisam umeo da napravim .

Razlog sto sam hteo da mi to bude uradjeno sve u bazi je sto sam hteo jos da obradim podatke u svim tabelama i da to bude na nivou baze a kasnije PHP samo to ocita i prikaze u obliku tabela i dijagrama i povratne informacije upravljanja preko MODBUS protokola .

Zbog toga ovo pripada forumu na mestu MySQL baza

Prihvatam predlog da to se moze uraditi sve u PHP kodu koji sam prethodno dao (ali i to treba znati .... ) ja sam licno bio vise za varijantu da sva ta dogadjanja i preracunavanja budu u bazi .
Hvala svima koji su ispratili ovu pricu
 
Odgovor na temu

mali_od_palube
Misa Grujic
Novi Sad

Član broj: 101386
Poruke: 32
135.245.248.*



+5 Profil

icon Re: Baza MariaDB REST servis u PHP06.04.2018. u 09:22 - pre 72 meseci
Ne znam tacno da napisem SQL kod ali mi se cini da ti u slucaju koji si opisao ne treba poseban trigger za svaku tabelu, vec je dovoljan samo jedan ako su tabele i njihova imena (brojevi) vec definisani. Nesto tipa:

Code:

for each row insert into concatenate('M0', NEW.MachineNo) set ...


Nevezano za problematiku vec za ciutljivost koda: malo je zbunjujuce da se trigger zove "before_insert" jedne tabele a da "okida" na "after insert" druge tabele.
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Baza MariaDB REST servis u PHP06.04.2018. u 09:35 - pre 72 meseci
Mani se triggera, već izmeni PHP skriptu da ti pakuje ulazne podatke u odgovarajuće tabele.
 
Odgovor na temu

dsivic

Član broj: 188446
Poruke: 105



+2 Profil

icon Re: Baza MariaDB REST servis u PHP07.04.2018. u 08:33 - pre 72 meseci
Ako podaci stižu RED po RED
Code:

(126638, NULL, NULL,     '2',         '1',     '2018-04-06 03:25:05'),


Ovdje skontaj koja kolona je BrojMasine
Code:

// build the SET part of the SQL command
    $BrojMasine="";
    $set = '';
    for ($i=0;$i<count($columns);$i++) {
      if($i == 3){
        $BrojMasine = $values[$i];
      }
      $set.=($i>0?',':'').'`'.$columns[$i].'`=';
      $set.=($values[$i]===null?'NULL':'"'.$values[$i].'"');
    }


Zatim SQL

Code:

// create SQL based on HTTP method
    switch ($method) {
      case 'GET':
        $sql = "select * from `M$BrojMasine`".($key?" WHERE id=$key":''); break;
      case 'PUT':
        $sql = "update `M$BrojMasine` set $set where id=$key"; break;
      case 'POST':
       $sql = "insert into `M$BrojMasine` set $set "; break;
      
      case 'DELETE':
        $sql = "delete `M$BrojMasine` where id=$key"; break;
    }


Ako baš hoćeš trigger imas IF ELSEIF

delimiter $$
CREATE DEFINER=`automatika`@`%` TRIGGER `M_before_insert` AFTER INSERT ON `danas` FOR EACH ROW

IF (NEW.MachineNo='1' ) then
INSERT INTO M01 SET MachineNo = NEW.MachineNo,StatusNo = NEW.StatusNo,Mac_Stat =concat(NEW.MachineNo,NEW.StatusNo), EventDate=NEW.EventDate,stop_time =NEW.EventDate ;
ELSEIF (NEW.MachineNo='2' ) then
INSERT INTO M02 SET MachineNo = NEW.MachineNo,StatusNo = NEW.StatusNo,Mac_Stat =concat(NEW.MachineNo,NEW.StatusNo), EventDate=NEW.EventDate,stop_time =NEW.EventDate ;
ELSEIF (NEW.MachineNo='3' ) then
INSERT INTO M03 SET MachineNo = NEW.MachineNo,StatusNo = NEW.StatusNo,Mac_Stat =concat(NEW.MachineNo,NEW.StatusNo), EventDate=NEW.EventDate,stop_time =NEW.EventDate ;

END IF;
END$$

 
Odgovor na temu

[es] :: MySQL :: Baza MariaDB REST servis u PHP

[ Pregleda: 3049 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.