IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Neaktivní uživatel:11.9.2013 19:20

Zdravím,

Mám data v tabulce databáze, tabulka má sloupečky id, name a value. Každý řádek je hodnota k dosazení na určité místo na stránce. Zajímá mě, jestli musím poslat dotaz a pak data přetahat cyklem do pole, nebo je na to nějaký spešl fígl. Chci aby výsledné pole vypadalo (nečekaně) takto:

// Pole[name] = value
$data['header'] = 'Moje hlavička';
$data['slogan'] = 'Můj slogan';
...
Editováno 11.9.2013 19:20
Odpovědět
11.9.2013 19:20
Neaktivní uživatelský účet
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Petr Nymsa:11.9.2013 19:23

Použiješ PDO a pomocí metod (ted si nevzpomenu, podívej se tady na tutoriály) ti to vrátí asociativní pole.

Například v DB máš sloupec ID - takže v poli máš klíč také ID ;)

Nahoru Odpovědět
11.9.2013 19:23
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na Petr Nymsa
Neaktivní uživatel:11.9.2013 19:31

Jo, tu metodu jsem právě tady v tutoriálech hledal, ale nedohledal :)

Nahoru Odpovědět
11.9.2013 19:31
Neaktivní uživatelský účet
Avatar
Petr Nymsa
Tvůrce
Avatar
Nahoru Odpovědět
11.9.2013 19:32
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na Petr Nymsa
Neaktivní uživatel:11.9.2013 19:45

Teď jsem se díval na metodu PDO fetch assoc, příklad co tam měli:

Kód:

<?php
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();

/* Fetch all of the remaining rows in the result set */
print("Fetch all of the remaining rows in the result set:\n");
$result = $sth->fetchAll();
print_r($result);
?>

Výsledek:

Fetch all of the remaining rows in the result set:
Array
(
    [0] => Array
        (
            [NAME] => pear
            [0] => pear
            [COLOUR] => green
            [1] => green
        )

    [1] => Array
        (
            [NAME] => watermelon
            [0] => watermelon
            [COLOUR] => pink
            [1] => pink
        )

)

A já bych potřeboval nejlépe

Příkaz

SELECT name, value FROM data

Výsledek

Array
(
    [header] => 'hodnota pro header'
    [slogan] => 'hodnota pro slogan'
    ...
)

Můžu to nějak přesvědčit, aby mi to nedělalo pole v poli, ale rovnou pole, kde budou klíče hodnoty sloupečku name a hodnoty ze sloupečku values? Omlouvám se, jsem dneska fakt nadmíru natvrdlej a vůbec mi to nemyslí :D

Nahoru Odpovědět
11.9.2013 19:45
Neaktivní uživatelský účet
Avatar
Neaktivní uživatel:11.9.2013 20:01

No, nic, vytahám to z toho pole, nebudu to kombinovat :D

Nahoru Odpovědět
11.9.2013 20:01
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:11.9.2013 20:11

Sice to jde, ale ne přímo. K PDO se dá přidat Messenger, který ti to pak servíruje dle potřeby.

Jeví se mi to však jako nešťastné řešení. Opravdu to v DB potřebuješ jako EAV?

Nahoru Odpovědět
11.9.2013 20:11
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Neaktivní uživatel:11.9.2013 20:34

U jednostránkového webu, kde potřebuji měnit obsah a kde se nebude měnit struktura mi to přijde jako ideální řešení, máš lepší nápad?

Nahoru Odpovědět
11.9.2013 20:34
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:11.9.2013 20:39

Jistě. Může to být jako jeden záznam v tabulce, která bude mít sloupečky "header" a "slogan". Když dáš fetch, tak se ti to rovnou objeví v požadovaném asociativním poli s klíči "header" a "slogan".

Nahoru Odpovědět
11.9.2013 20:39
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Neaktivní uživatel:11.9.2013 20:42

Nevím jestli si rozumíme, header a slogan byli jenom pro příklad, dál tam bude halda dalších částí - titulek, description, keywords, pak nadpisy, obsah asi 3 sekcí, patička, ...

Nahoru Odpovědět
11.9.2013 20:42
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:11.9.2013 20:53

Další možností by mohl být soubor INI, který se velmi dobře edituje a načítá se přímo do pole funkcí parse_ini_file(). To pole může být i dvourozměrné.

Velmi dobře se dá použít i XML, které načteš do objektu funkcí simplexml_load_fi­le() a pak se odkazuješ už jen $config->header.

Stejným způsobem můžeš konfiguraci uložit i do JSON a načíst funkcí json_decode().

Také se to dá nacpat do výstupní šablony.

Nahoru Odpovědět
11.9.2013 20:53
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Neaktivní uživatel:11.9.2013 21:04

Radši bych to měl v databázi, protože do toho bude vyhazovat data i herní server :)

Nahoru Odpovědět
11.9.2013 21:04
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:11.9.2013 21:09

Z tebe to najednou leze...

Tak si nech databázi jak máš a to načtení do pole si udělej v konstruktoru třídy, která ti bude držet konfiguraci a nadefinuješ magickou metodu __get().

Nahoru Odpovědět
11.9.2013 21:09
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:11.9.2013 21:11

Jen je mi divné, proč máš v tabulce to "ID", když primárním klíčem je "name".

Nahoru Odpovědět
11.9.2013 21:11
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Neaktivní uživatel:11.9.2013 21:17

Protože jste mi to poradili :D

// Jinak bych ho tam neměl :)

Editováno 11.9.2013 21:17
Nahoru Odpovědět
11.9.2013 21:17
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Kit:12.9.2013 11:32

On je to takový zvyk, používat ID jako primární klíč. Většinou je to správné řešení, ale v daném případě jsem na pochybách. Už proto, že je použita relační databáze v místě, kde je potřebné KVS. Něco z toho by možná mělo být ve výstupní šabloně (titulek, header, patička). Nadpisy kapitol by měly být u těch kapitol v jiné tabulce, do nastavení to nepatří. Možná je ta tabulka úplně zbytečná.

Nahoru Odpovědět
12.9.2013 11:32
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Neaktivní uživatel:12.9.2013 11:50

Ještě to promyslím, díky ;)

Nahoru Odpovědět
12.9.2013 11:50
Neaktivní uživatelský účet
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:12.9.2013 11:58

Numerický primární klíč dávám všemu, IMHO je to dobrá praktika, už jen proto, kdyby se index objevil v cizím klíči. Varchary mají mnohem vyšší režii.

Nahoru Odpovědět
12.9.2013 11:58
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:12.9.2013 12:31

Numerické syntetické ID je dobrou praktikou u vazby relačních tabulek. Jenže klíčem do této tabulky není "ID", ale "name". Podívej se do zadání.

V cizím klíči bych určitě uvedl "header" nebo "slogan". Nevidím důvod, proč by v této tabulce mělo být víc headerů nebo sloganů.

Uvědom si, že pokud máš ID, name a value, porušuješ 3NF, protože sloupec value je závislý nejen na "ID", ale také na "name".

Nahoru Odpovědět
12.9.2013 12:31
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:12.9.2013 12:34

Já jsem to jeho zadání nějak nepochopil, ale kdybych to psal, určitě bych tam ten numerický klíč měl. Spíše mi přijde, že je někde chyba v návrhu, když tam není.

Nahoru Odpovědět
12.9.2013 12:34
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:12.9.2013 12:53

Ano, chyba je v návrhu. To jsem už také psal. Proto je řešení kostrbaté, ať se to udělá jakkoli.

Nahoru Odpovědět
12.9.2013 12:53
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 21 zpráv z 21.