Hente hele databasen og gjøre den til skikkelig json

BlitZz

Member
Hei! Jeg har et lite problem her :p
Jeg har egentlig aldri tatt meg tid til å lære php og database systemer, men jeg har prøvd meg litt frem nå med at jeg tenkte at jeg skulle bytte ut noe json inne i appen min med database slik at jeg slipper å oppdatere hver gang jeg må fikse på noe..

Jeg har hittil laget en mysql database med noen forskjellige tables. (som vist under)
0d0d656a545c36b2c693eb98d4eb15ef.png


Inne i et table ser det slik ut:
ec4e505dc9d120bc4f5947ec174356c7.png


Det jeg prøver på da er vel å hente alle tabels og deres "sub tables" deretter lage skikkelig json ut av det hele. noe slikt:
d4e8549b3bdfb4d362d22034cfd4c0f8.png


Har som sagt prøvd meg litt frem og har klart å hente fra databasen og lage json ut av det men har da to problemer. Når jeg bruker denne koden:

PHP:
<?php
    header('Access-Control-Allow-Origin: *'); //remove later
    header('Access-Control-Allow-Methods: GET, POST'); //remove later
    require 'config.php';
  
    try {
   
        $db = new PDO($dsn, $username, $password);
        $db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
      
      
        // Get Other
        $sth = $db->query("SELECT * FROM other,tools");
        $other = $sth->fetchAll();
       
         function utf8ize($d) {
            if (is_array($d)) {
                foreach ($d as $k => $v) {
                    $d[$k] = utf8ize($v);
                }
            } else if (is_string ($d)) {
                return utf8_encode($d);
            }
            return $d;
        }
       
       
        $json = json_encode(utf8ize($other));
        $json = preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/', function ($match) { return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE'); }, $json);
        echo $json;
    //echo json_encode(utf8ize($item)); // don't

        //echo json_last_error();

       
    } catch (Exception $e) {
        echo $e->getMessage();
    }
(Har hentet koden fra et tideligere prosjekt jeg fikk hjelp på fra en som kunne php, men ta det med ro, skjønner meste parten)

Og deretter henter det med jquery alax får jeg ikke med "tittelen" altså fra bilde nr 3, sånn at det står: ("other": ) foran resten av objektene. Det blir bare en haug med objekter uten en "parrent" og alt blir som en stor json fil, ikke en json med forskjellige "kategorier".

Har tenkt på en løsning som jeg er ganske sikker på vil fungere da, men det vil være en veldig dårlig måte å utføre det på. Tenkte at jeg kan be brukerens klient spørre etter bare tabelet "other" når han er inne i "other" på appen. Men det tror jeg vil bli masse trafikk med tanke på at appen har 6000 aktive brukere..
Så det jeg egentlig hadde i tankene var at brukeren laster ned hele databasen og lagrer den i localstorage, deretter vil appen spørre serveren om det er en ny versjon tilgjengelig hver gang den starter. Slik at loaden blir betraktelig mindre.

Har dere noen tips eller en løsning på hva jeg kan gjøre for å oppnå dette?
Takk!
 

adeneo

Medlem
Jeg får jo ikke testet dette, men det er vel bare
PHP:
$arr = array( "other" => $other );
echo json_encode( $arr );

Og det ser ut som du burde sette opp databasen og alt annet med UFT8 direkte, så slipper du å konvertere alt i hvert eneste skritt ?
 

BlitZz

Member
Jeg får jo ikke testet dette, men det er vel bare
PHP:
$arr = array( "other" => $other );
echo json_encode( $arr );
Hmm, ser lovende ut! :) Skal prøve det senere!

Og det ser ut som du burde sette opp databasen og alt annet med UFT8 direkte, så slipper du å konvertere alt i hvert eneste skritt ?
Ja! Det hadde vert det optimale, men finner ikke UFT8 -_- Nermeste jeg finner er det "swedish". Heter det noe annet eller er det bare "UTF8"?
Takker!!
 
Topp