Autor Zpráva
omfo
Profil
Ahoj,

chtěl bych mít podobnou tabulku:



Můžete mi poradit jak si nejlépe navrhnout DB a jak potom pomocí MySQL a PHP data ukládat a vypsat? S tím, aby šli přidávat a odebírat výrobky i příslušenství. A samozřejmě ke každému výrobku není dostupné všechno příslušenství (prázdné buňky). Nepotřebuji konkrétní příklad, stačí mi jenom popsat jak na to.

Předem děkuju
anonymníí
Profil *
omfo:
3 tabulky:

vyrobky (id_vyrobku, nazev_vyrobku)
prislusenstvi (id_, nazev_prislusenstvi)
varianta (id_vyrobku, id_prislusenstvi, cena)
peta
Profil
anonymníí: prislusenstvi (id_prislusenstvi, nazev_prislusenstvi)
omfo:
Jak s tim pracovat?
Pridas si vyrobek.
Pridas si prislusenstvi.
Pridas si variantu 1, 2, 3, ... ktere propojuji prvky z tabulky vyrobek a prislusenstvi.

Pak mas moznosti pouzit jednu tabulku se vsemi nevyhodami, co to obnasi, jako duplicity, limity poctu prislusenstvi, pomalejsi vyhledani. Podle toho, jaky zvolis zpusob
* https://dev.mysql.com/doc/refman/5.0/en/set.html
* https://dev.mysql.com/doc/refman/5.0/en/enum.html
* "a,b,c,d" deleni retezce se seznamem prislusenstvi
Joker
Profil
V závislosti na tom, jestli se „příslušenství“ datově nějak liší od „výrobku“, je možná zvláštní tabulka pro příslušenství zbytečná.
omfo
Profil
Tak mám vytvořené 3 tabulky:
vyrobky (id_vyrobku, nazev_vyrobku)
prislusenstvi (id_prislusenstvi, nazev_prislusenstvi)
varianta (id_vyrobku, id_prislusenstvi, cena)

Ale teď nevím jak z nich ty data načíst. Budu muset nejspíš nějak ty tabulky propojit, ne?
Kajman
Profil
Pro tabulku z [#1] si můžete načíst do php polí data ze všech tří tabulek. První bude na řádky, druhé na sloupce a do třetího budete koukat, zda tam je pro kombinaci řádek a sloupec nachystaná cena.
omfo
Profil
Kajman:
Tady bych asi potřeboval poradit trochu konkretneji. Jak spravne nacist data do poli? A jak vypsat tu tabulku aby tam byla ta kontrola pro kombinaci radek, sloupec.
Predem diky moc za radu
radozaj
Profil
omfo:
<?php

echo "<table>";
echo "<tr>";
echo "<th></th>";

$queryV = pg_query("
    SELECT id_vyrobku, nazev_vyrobku
    FROM vyrobky
    ORDER BY id_vyrobku;");
while ($vyrobky = pg_fetch_array($queryV)) {
    echo "<th>$vyrobky[nazev_vyrobku]</th>";
}

echo "</tr>";

$queryP = pg_query("
    SELECT id_prislusenstvi, nazev_prislusenstvi
    FROM prislusenstvi
    ORDER BY id_prislusenstvi;");
while ($prislusenstvi = pg_fetch_array($queryP)) {

    echo "<tr>";
    echo "<th>$prislusenstvi[nazev_prislusenstvi]</th>";

    $posledniVyrobek = 0;
    $queryV = pg_query("
            SELECT id_vyrobku, id_prislusenstvi, cena
            FROM varianta
            WHERE id_prislusenstvi = $prislusenstvi[id_prislusenstvi]
            ORDER BY id_vyrobku;");
    while ($varianta = pg_fetch_array($queryV)) {
        for ($i=$posledniVyrobek+1; $i<$varianta[id_vyrobku]; $i++) echo "<td></td>";
        $posledniVyrobek = $varianta[id_vyrobku];

        echo "<td>$varianta[cena]</td>";
    }

    echo "</tr>";
}

echo "</table>";

?>
omfo
Profil
radozaj:
Díky moc. Ale jeste jsem narazil na jeden problem. Pokud v tabulce "varianta" nemam "id_vyrobku" cislovane od 1(dojde k odstraneni vyrobku), tak mi to v radcich ceny posunuje (dela prazdne bunky). Tusim, ze problem bude v cyklu: for ($i=$posledniVyrobek+1; $i<$varianta[id_vyrobku]; $i++) echo "<td></td>";, ale zatim sem neprisel na to jak to vyresit.
Kajman
Profil
Na to by pomohlo to uložení do pole.

<?php

echo "<table>";
echo "<tr>";
echo "<th></th>";

$ulozene_vyrobky=array();
$queryV = pg_query("
    SELECT id_vyrobku, nazev_vyrobku
    FROM vyrobky
    ORDER BY id_vyrobku;");
while ($vyrobky = pg_fetch_array($queryV)) {
    echo "<th>$vyrobky[nazev_vyrobku]</th>";
    $ulozene_vyrobky[]=$vyrobky['id_vyrobku'];
}

echo "</tr>";

$ulozene_ceny=array();
$queryV = pg_query("
    SELECT id_vyrobku, id_prislusenstvi, cena
    FROM varianta
    WHERE id_prislusenstvi = $prislusenstvi[id_prislusenstvi]
    ORDER BY id_vyrobku;");
while ($varianta = pg_fetch_array($queryV)) {
    $ulozene_ceny[$varianta["id_vyrobku"]][$varianta["id_prislusenstvi"]]=$varianta["cena"];
}


$queryP = pg_query("
    SELECT id_prislusenstvi, nazev_prislusenstvi
    FROM prislusenstvi
    ORDER BY id_prislusenstvi;");
while ($prislusenstvi = pg_fetch_array($queryP)) {
    
    echo "<tr>";
    echo "<th>$prislusenstvi[nazev_prislusenstvi]</th>";
    
    foreach($ulozene_vyrobky as $id_vyrobku)
    {
        if(isset($ulozene_ceny[$id_vyrobku][$prislusenstvi["id_prislusenstvi"]]))
        {
            
            echo "<td>{$ulozene_ceny[$id_vyrobku][$prislusenstvi["id_prislusenstvi"]]}</td>";
        }
        else
        {
            echo "<td>&nbsp;</td>";
        }
    }
    echo "</tr>";
}

echo "</table>";
peta
Profil
vyrobky (id_vyrobku, nazev_vyrobku)
prislusenstvi (id_prislusenstvi, nazev_prislusenstvi)
varianta (id_vyrobku, id_prislusenstvi, cena)

Tohle te zajima? jedna velka tabulka?

SELECT
  a.id_varianta --to by tam melo byt
  b.nazev_vyrobku
  c.nazev_prislusenstvi
  a.cena
FROM
  varianta a
  LEFT JOIN vyrobky b ON b.id_vyrobku=a.id_vyrobku
  LEFT JOIN prislusenstvi c ON c.id_prislusenstvi=a.id_prislusenstvi

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0