| Autor | Zpráva | ||
|---|---|---|---|
| Tori Profil |
#1 · Zasláno: 17. 1. 2012, 21:02:08
Tronicken:
„v jednom databázovém řádků je více dat i z dalších inputů (které s výslednou vypisovanou php tabulkou nemají nic společného ale vztahují se k obsahu stránky) celá vypisovaná tabulka (to co se tu snažím vyřešit) MÁ dynamický počet inputů (klidně 200)“ A proto by neměly být ve stejné DB.tabulce data z těch nesouvisejících inputů, a zároveň data z těch polí kterých si naklikáte kolik potřebujete. Na první pohled to je vztah 1:N - jeden záznam o něčem (=nesouvisející data) a na něj navázaných hodně záznamů o něčem jiném (=200 inputů). Jestli se můžu zeptat - s jakými daty přesně pracujete? O čem tu vlastně mluvíme? (Např.: ty dynamické inputy si naklikáváte po trojicích. Budou vždy přesně tři - jako máte teď - anebo se může jejich počet změnit? Alphard vám navrhnul schéma tabulky, které počítá s libovolných počtem záznamů na řádek a s tím, že všechny buňky jsou stejně důležité a máte je teda ve formu po třech na řádek hlavně z důvodu vzhledu/přehlednosti. Pokud by spolu ale významově souvisely hodnoty v rámci jednoho řádku, tak bych je třeba taky ukládala do DB po třech na řádek.) Jde o to, že principielně je chyba ukládat více hodnot do jedné DB buňky - špatně se s nimi pracuje, jak jste sám zjistil. Ale bez znalosti toho, o jaká data jde, vám sice poradíme změny k lepšímu, ale možná ne optimální návrh DB. |
||
| Tronicken Profil * |
#2 · Zasláno: 17. 1. 2012, 23:16:10 · Upravil/a: Tronicken
Tori:
„Jestli se můžu zeptat - s jakými daty přesně pracujete?“ Text, čísla, libovolné znaky UTF - 8 kódování „O čem tu vlastně mluvíme?“ Viz můj příspěvek č. 30 2. část (to je jak to je momentálně provedené a jak by jsem si představoval výsledek). Dynamických inputů (co si naklikám) bude v konečném součtu 6 (se třemi se tu pracovalo jenom pro ukázku). Jinak změnit nepůjdou (uživatelsky). „Pokud by spolu ale významově souvisely hodnoty“ Právě že obsak s 99% procentní pravděpodobností spolu souviset nebude v jednotlivých buňkách. „Jde o to, že principielně je chyba ukládat více hodnot do jedné DB buňky - špatně se s nimi pracuje“ Možná ano, ale k jednotlivým částem se dá přidat nějaký znak, který se pak rozřeže pomocí explode.. V konečném důsledku to je jako by to byl nějaký dlouhý text, který potřebuju hodit do sloupečků a vypsat vedle sebe (jedna databázová buňka = 1 sloupeček, kdy na sebe obsahově hodnoty z buněk navazují = 1. hodnota v 1. databázové buňce na jednom řádku v databázi se rovná 2. databázové buňce na prvním řádku 2. hodnota v 1. databázové buňce na jednom řádku v databázi se rovná 2. databázové buňce na druhém řádku x. hodnota v 1. databázové buňce na jednom řádku v databázi se rovná 2. databázové buňce na xtém řádku ) s tím, že jednotlivé řádky u výpisu se budou chovat jako celek.. Jak to mám jinak popsat a vysvětlit? Dodatek - při rozsekání pomocí explode mi to "vyplivne" Array ( [0] => 1a [1] => 2a [2] => 3a [3] => 4a ) a tento hodnoty tohoto arraye (0,1,2,3) jsou stejné jak pro první databázovou buňku, tak pro druhou, ... , tak pro šestou databázovou buňku na jednom řádku (hodnoty k sobě pasují).. Jak toho využít? Upřesnění mám uloženo například v prvni buňce anna # anna2 # anna3 # ve druhe buňce ota # ota2 # ota3 # ve třetí buňce pepa # pepa2 # pepa3 # A při rozsekání explodem první buňka Array ( [0] => anna [1] => anna2 [2] => anna3 ) druhá buňka Array ( [0] => ota [1] => ota2 [2] => ota3 ) třetí buňka Array ( [0] => pepa [1] => pepa2 [2] => pepa3 ) |
||
| Tori Profil |
#3 · Zasláno: 18. 1. 2012, 01:53:00
Tronicken:
> „Jestli se můžu zeptat - s jakými daty přesně pracujete?“ > Text, čísla, libovolné znaky UTF - 8 kódování Myslela jsem spíš, jestli to je fórum, databáze filmů/koček/motorek/citátů, ... tak nějak. > „Jde o to, že principielně je chyba...“ > Možná ano, ale k jednotlivým částem se dá přidat nějaký znak, který se pak rozřeže pomocí explode.. Koukněte na otočení pole o 90° - řešení v první odpovědi by se dalo použít na to pole rozsekaných (rozřezaných) výsledků, když jinak nedáte. |
||
| Tronicken Profil * |
#4 · Zasláno: 18. 1. 2012, 16:48:05 · Upravil/a: Tronicken
Tori:
„když jinak nedáte.“ Toto je nejreálnější řešení.. Protože dejme tomu, že si uživatel přidá 200 krát inputy. Jelikož mu to vždycky "vyplivne" najednou 6 inputů a on by si to hodil 200 krát -> vytvářet 1200 buňek do tabulky, pak to po jedné přiřazovat.. Bylo by to ještě více komplikovanější a hlavně časově zdlouhavé a náročné, než ukládat do šesti buněk a z šesti buňek pak zase vytahovat.. Nepotřebuju vytáhnout jenom část, potřebuju vytáhnout vždy všechny buňky a ty buňky k sobě přiřadit. Tori: „Koukněte na otočení pole o 90°“ Mno zajimavé řešení, nicméně funce flipDiagonally? Call to undefined function flipDiagonally() in ... on line 62 -> zkoušeno na čistý CopyPaste jejich prvního příkladu. Nešlo by nějak jednoduše upravit to řešení od abc [#8] aby se prostě řádek choval jako celý řádek a né jako jednotlivé buňky (viz [#20] )? Tu uprávu myslím v podobě například nějakých dalších vložených tabulek apod. |
||
| Tori Profil |
#5 · Zasláno: 18. 1. 2012, 17:08:56
|
||
| Tronicken Profil * |
#6 · Zasláno: 18. 1. 2012, 17:48:00
Napadl mě ještě jeden způsob -
do databáze ukládam hodnoty za sebou oddělené ## . Vytvořil sem na to funkci na vytahování z databáze a přiřazování $hash = $_GET[hash]; //Získám klíč z adresního pole
$q = "SELECT * FROM tabulka where hash = '$hash'"; //Vyberu si hodnoty
$r = mysql_query($q) or die("Dotaz nelze provést: " . mysql_error()); //Provedu dotaz
while ($p = mysql_fetch_array($r))
{
$d = array_map(null, explode("##",$p['bunka1']), explode("##",$p['bunka2']), explode("##",$p['bunka3']), explode("##",$p['bunka4'])); //Pomocí array_map přiřadím arraye k sobě, které sem získal "rozsekáním" pomocí explode
print_r($d); //Vypíšu
}Výsledek z toho získám jako Array ( [0] => Array ( [0] => 1a [1] => 1b [2] => 1c [3] => 1d ) [1] => Array ( [0] => 2a [1] => 2b [2] => 2c [3] => 2d ) [2] => Array ( [0] => 3a [1] => 3b [2] => 3c [3] => 3d ) [3] => Array ( [0] => 4a [1] => 4b [2] => 4c [3] => 4d ) [4] => Array ( [0] => 5a [1] => 5b [2] => 5c [3] => 5d ) [5] => Array ( [0] => [1] => [2] => [3] => ) ) Jak mám z tohoto "arraye" vytvořit tabulku - <tr><td>1a </td><td> 1b </td><td> 1c </td><td> 1d </td></tr> <tr><td>2a </td><td> 2b </td><td> 2c </td><td> 2d </td></tr> <tr><td>3a </td><td> 3b </td><td> 3c </td><td> 3d </td></tr> <tr><td>4a </td><td> 4b </td><td> 4c </td><td> 4d </td></tr> <tr><td>5a </td><td> 5b </td><td> 5c </td><td> 5d </td></tr> ? |
||
| panther Profil |
#7 · Zasláno: 18. 1. 2012, 22:07:54
Tronicken:
„Jak mám z tohoto "arraye" vytvořit tabulku“ foreach ($d as $array) {
echo '<tr>';
foreach ($array as $item) {
echo '<td>' . $item;
}
} |
||
| Tronicken Profil * |
#8 · Zasláno: 18. 1. 2012, 22:48:09
Super! Jede to! Dosáhl jsem toho, čeho jsem chtěl! Jupí
Děkuju všem zůčastněným a je mi líto že jste mě prostě nemohli pochopit. Takže - díky |
||
|
Časová prodleva: 15 let
|
|||
0