« 1 2 »
Autor Zpráva
Tronicken
Profil *
Zdravím,
Jeden hloupý dotaz - jak seřadit buňky tabulky?
V databázi mám jednotlivé buňky uloženy v sloupečcích jako <td>buňka</td><td>buňka2</td><td>buňka3</td>

Jak je po výpisu seřadit? Tzn.

-----------------------
nadpis1 I nadpis2
-----------------------
buňka z jedné tabulky I buňka z druhé tabulky 
buňka1 z jedné tabulky I buňka1 z druhé tabulky 
buňka2 z jedné tabulky I buňka2 z druhé tabulky 

(potřebuju jednotlivé buňky přiřadit k jednotlivým sloupečkům)
Díky
Tori
Profil
Tronicken:
Mají ty dvě tabulky něco společného, anebo to jsou naprosto nesouvisející data? (= jestli by to nešlo udělat v SQL)
Tronicken
Profil *
Mno záleží co se myslí tím společeného..
V každé tabulce je zápis ve tvaru <td>něco</td> a bez jakýchkoli úprav následuje další <td>neco2</td>

Jednoduše řečeno - při výpisu dostanu výsledek ve formátu <td>neco</td><td>neco2</td><td>neco3</td><td>neco4</td> a já potřebuju rozřadit
neco - sloupec 1
neco2 - sloupec1
neco3 - sloupec2
neco4 - sloupec2

Obsah databáze můžu ukládat jako "jednolitý" celek -> tzn. nemůžu si někam doprostřed hodit nějaký jeden tag (můžu ale v jednotlivém zápisu upravit cokoli - <td neco </td> napr za <tr>neco</tr>)..
panther
Profil
Tronicken:
při výpisu dostanu výsledek ve formátu <td>neco</td><td>neco2</td><td>neco3</td><td>neco4</td>
tohle mi zavání špatným návrhem DB - opravdu potřebuješ do DB ukládat i spoustu HTML balastu? Co zkusit ukládat jen obsahy jednotlivých buněk a HTML skládat až na výstupu?

Možná jsem se netrefil a dovedu si představit situaci, kdy by se hodilo mít HTML tabulku v DB. Obávám se ale, že tvůj případ tohle nebude.
Tronicken
Profil *
Není problém neukládat bez HTML.. Je pak ale problém to seřadit..

Jak to mám udělané - mám dynamický počet inputů, kdy hodnoty z jednoho typu inputů se ukládají do jedné tabulky, z daších inputů do další tabulky.. A všecko se mi tak ukládá do jednoho.

Takže není problém to tam hodit místo <td>neco</td><td>neco2</td><td>neco3</td> - neco neco2 neco3 , ale jak to mám pak roztřídit?
abc
Profil
Ahoj,

jestli to dobře chápu já, tak by to teoreticky mohlo byt nějak tak, že budeš mít jednu velkou tabulku a v ní 2 menší a 2 dotazy do databáze a nejdřív naplníš daty tabulku 1 a potom tabulku 2?
Ale možná to taky není ono :-)
<table>
<tr><td><table>
        <tr><td>neco</td></tr>
        <tr><td>neco2</td></tr>
        </table>
    </td>
    <td><table>
        <tr><td>sloupec1</td></tr>
        <tr><td>sloupec2</td></tr>
        </table>
    </td>
</tr>
</table>
Tronicken
Profil *
Toto je zajimavé řešení, akurát já by jsem to potřeboval "zvrchu dolů" a ne "zleva doprava" (Nebo-li legenda nahoře, obsah seřazený pod tím.. Takto je legenda nalevo a hodnoty jsou seřazené v řádku)


Ale děkuji za odezvy :)
abc
Profil
Snad není takový problém si tu tabulku upravit...
Např:
<table>
<tr><th>Nadpis 1</th><th>Nadpis 2</th></tr>
<tr><td><table>
        <tr><td>Tabulka1-hodnota1</td></tr>
        <tr><td>Tabulka1-hodnota2</td></tr>
        </table>
    </td>
    <td><table>
        <tr><td>Tabulka2-hodnota1</td></tr>
        <tr><td>Tabulka2-hodnota2</td></tr>
        </table>
    </td>
</tr>
</table>



A vůbec, teď mě tak napadlo, že ty "vnořené" tabulky nejsou přece vůbec potřeba. Toto samozřejmě vyřešit jedním, správným dotazem do databáze...
Tori
Profil
Tronicken:
hodnoty z jednoho typu inputů se ukládají do jedné tabulky, z daších inputů do další tabulky
Dokážete identifikovat a odlišit jednotlivé odpovědi? Např. že když vyplním formulář, tak se polovina dat uloží do tabulky1, polovina do tabulky2, ale oba řádky dat dostanou stejné ID.
Pak by mělo jít použít prostě SELECT * FROM tabulka1 INNER JOIN tabulka2 USING(id), ne? Tím pádem dostanete hodnoty z jednoho vyplnění formuláře vedle sebe už v DB, přestože jsou v různých DB tabulkách.
Tronicken
Profil *
Děkuji za reakce, řešení od abc by aj fungovalo dobře, akurát problém je v tom, že při tomto výpisu se mi jednotlivé řádky nechovají jako celky (když je v jedné buňce delší text a odřádkuje se mi, neodřádkuje se i ta další).. Jak toto vyřešit?

Tori

Dokážete identifikovat a odlišit jednotlivé odpovědi? Např. že když vyplním formulář, tak se polovina dat uloží do tabulky1, polovina do tabulky2, ale oba řádky dat dostanou stejné ID.

Přesně takto to mám, akurát do těch DB tabulek se ukládají data z více inputů, vše pod jedním ID
Ve výsledku to v databázi vypadá nějak takto (snad to půjde pochopit z "náčrtku")..

ID : SLOUPEČEK 1 : SLOUPEČEK 2 : SLOUPEČEK 3 (oddělené dvojtečkou)
-------------------------------------------------------------------------------------------
1 : <td>neco</td><td>neco2</td><td>neco3</td> : <td>tab</td><td>tab2</td><td>tab3</td> : <td>omo</td><td>omo2</td><td>omo3</td>


Dodatek - momentálně to není jenom "samotné" <td>, ale je to v kombinaci <tr><td> neco </td></tr>
Dodatek2 - <tr><td> se dá nahradit čímkoli jiným..
Tori
Profil
Tronicken:
Aha. Pokud nutně chcete ukládat více hodnot do jednoho pole, nedávejte je jako HTML, ale jako řetězce oddělené např. "###" (neco###neco2###neco3]. Bude se to při výpisu lépe zpracovávat pomocí explode. Lepší by ale bylo ukládat jednu hodnotu do jednoho sloupečku, i výpis by se tím zjednodušil. (Předpokládám, že máte stabilní počet inputů ve formuláři. Pokud se mění - že v jednom sloupečku teď máte 3 <td> a v jiném třeba 5 - tak by se to řešilo jinak.)
Tronicken
Profil *
Pokaždé novou hodnotu do jednoho sloupečku právě není možné kvůli dynamickému počtu inputů (uživatel si pomocí javascriptu může zvolit kolik inputů chce na stránku přidat - viz script ->

<script type="text/javascript"> 
      function novy_radek(){ 
        var radku = document.getElementById('tabulka').rows.length; 
        var radek=document.getElementById('tabulka').insertRow(radku); 
        var bunka=radek.insertCell(0); 
        radek.innerHTML="<td width=66> <input type=text value=&nbsp; size=9 name=prvni[]></td><td width=345><input type=text value=&nbsp; size=65 name=druhy[]></td><td width=72><input type=text value=&nbsp; size=9 name=treti[]></td>"; 
        return false; 
      } 
    </script> 

Na který se volá

<a href="#" onclick="return novy_radek();">Přidej řádek</a>

Na "poskládaní dohromady" mám pak rozřídění pomocí foreach

  $prvni = '';
foreach($_POST['prvni'] as $prvnia)
$prvni .="<tr><td>". $prvnia."&nbsp;</td></tr>";
 
  $druhy = '';  
foreach($_POST['druhy] as $druhya)
$druhy .="<tr><td>".  $druhya."&nbsp;</td></tr>";
  
  $treti = '';  
foreach($_POST['treti'] as $tretia)
$treti .="<tr><td>".  $tretia."&nbsp;</td></tr>";
  

A z toho mi vznikne výsledek - viz příklad který sem už uvedl -

ID : SLOUPEČEK 1 : SLOUPEČEK 2 : SLOUPEČEK 3 (oddělené dvojtečkou)
-------------------------------------------------------------------------------------------
1 : <td>neco</td><td>neco2</td><td>neco3</td> : <td>tab</td><td>tab2</td><td>tab3</td> : <td>omo</td><td>omo2</td><td>omo3</td>


Právě proto jsem psal - řešení od abc by aj fungovalo dobře, akurát problém je v tom, že při tomto výpisu se mi jednotlivé řádky nechovají jako celky (když je v jedné buňce delší text a odřádkuje se mi, neodřádkuje se i ta další)
Jak mám teda udělat výpis, aby se mi zachovalo stejné formátování řádků jako při zadávaní?
Alphard
Profil
Tronicken:
Stále se mi zdá, že váš návrh ukládání dat není optimální, ale přes veškeré vaše popisy se mi nedaří představit si, jak to má vypadat.
Budu předpokládat že [#8] je blízko k výsledku:
Neukládejte žádné html, jen samotná data. V databázi stačí mít sloupec s id tabulky, kterou vypisujete, a sloupec s pořadím prvku v konkrétní tabulce.
Pak v dotazu použijete where id_table = x order by poradi a data vykreslíte do jednoduché tabulky. Neměl by být problém to synchronizovat pro dva dotazy nebo to seskupit na úrovni databáze.
Tronicken
Profil *
Alphard:
nedaří představit si, jak to má vypadat.

Jak to teda jinak vysvětlit? Když udělám živou ukázku, bude to to samé jako tady to vysvětlení..

Tak jinak - tím scriptem co jsem psal nahoře se po kliknutí na odkaz přidá řádek s inputama (v tom scriptu 3 vedle sebe). Těch řádků může být neomezené množství, zapomocí foreach cyklu se pak jednotlivé inputy "dají za sebe" a oddělí se nastaveným znakem (tu html tagy).
Výsledek pak potřebuju hodit do takové podoby, prostě oddělit zase na jednotlivé řádky jako to bylo na začátku.

abc -ovo řešení se tomu přiblížilo, akurát když je pak jeden řádek (opticky jeden řádek, ne jeden řádek ve scriptu - tzn ne pouze <td> ale v konečném provedení), potřebuju aby se choval jako celý řádek. Protože když potom buňka "přeteče" tak už mi řádky k sobě nesedí (to rovnou můžu dát tag <hr> pro oddělení řádků)
Alphard_
Profil *
Tronicken:
Mně chybí vazba mezi tím co máte a jak to má vypadat. Podle vašeho kódu a vysvětlení vytvořím např. 5 řádků se 3 vstupy, tj.

1a 1b 1c
2a 2b 2c
3a 3b 3c
4a 4b 4c
5a 5b 5c

Může naznačit, jak to chcete finálně vypsat?
Tronicken
Profil *
Ano přesně takto to má vypadat. V databázi mám uloženo v

jednom sloupci
<tr><td>a</td></tr><tr><td>a</td></tr><tr><td>a</td></tr><tr><td>a</td></tr><tr><td>a</td></tr>

Ve druhém sloupci

<tr><td>b</td></tr><tr><td>b</td></tr><tr><td>b</td></tr><tr><td>b</td></tr><tr><td>b</td></tr>

Ve třetím sloupci

<tr><td>c</td></tr><tr><td>c</td></tr><tr><td>c</td></tr><tr><td>c</td></tr><tr><td>c</td></tr>

s tím, že ty HTML tagy se dají nahradit čímkoli.
Alphard_
Profil *
Ta čísla k písmenům jste zapomněl doplnit, nebo něco nechápu?

Ale jinak myslím, že se konečně někam dostáváme, takže v podstatě ty dvě tabulky o kterých jste mluvil v prvních příspěvcích nejsou vůbec potřeba, jde vám jen o vykreslení tabulky s libovolným počtem řádků a záznamů jako v [#15].
Mohu navrhnout řešení, které bude naprosto jiné než cokoliv co dosud máte?
Tronicken
Profil *
Alphard:
zapomněl doplnit

Ne.. Ta čísla tam prostě nejsou.. Takto to vypadá v databázi, kde mám 4 sloupečky. ID, jeden sloupec, druhý sloupec, třetí sloupec


Mohu navrhnout řešení

Jde mi hlavně o to dynamické přidávaní elementů (toto jedině asi přes javasript, aby se obsah předchozích elementů nesmazal) a pak zpětný výpis.
Alphard_
Profil *
Tronicken:
Ne.. Ta čísla tam prostě nejsou..
Teď si nerozumíme, já jsem napsal příklad toho, co jako uživatel zadám. Takto jsem pochopil váš zadávací formulář. Teď neřešme žádnou databázi, jen prostě vstup a výstup. Na vstupu je 15 položek přesně jako v [#15].
A já se ptám, jak má vypadat tabulka na výstupu. Má to být identická tabulka s 15 položkami, nebo se to má nějak transformovat?
Tronicken
Profil *
Ano, co je vstupem, to má být výstupem. Akurát když mám tabulku

1a 1b 1c
2a 2b 2c
3a 3b 3c
4a 4b 4c
5a 5b 5c

a náhodou by mi "3c" "přeteklo", tak se odřádkuje jenom to (zalomí se text), ale já potřebuju aby se společně s tím zalomil celý třetí řádek.


Aby to nevypadalo nějak takto potom -

1a 1b 1c
2a 2b 2c
3a 3b 3c
4a 4b 3c
5a 5b 4c
6a 6b 5c



ale


1a 1b 1c
2a 2b 2c
3a 3b 3c
      3c
4a 4b 4c
5a 5b 5c
(Nic znamená prostě nic.. Akurát taky nejde dávat více mezer za sebe)


Poslední větu prosím ignorovat, předběhl sem sám sebe..
Alphard
Profil
Struktura databázové tabulky:
id, table, row, col, value

// pole získané dotazem: select `row`, `col`, `value` from tabulka where `table` = x order by `row`, `col`
$db = array();
$db[] = array('row' => 1, 'col' => 1, 'value' => '1a');
$db[] = array('row' => 1, 'col' => 2, 'value' => '1b');
$db[] = array('row' => 1, 'col' => 3, 'value' => '1c');
$db[] = array('row' => 2, 'col' => 1, 'value' => '2a');
$db[] = array('row' => 2, 'col' => 2, 'value' => '2b');
$db[] = array('row' => 2, 'col' => 3, 'value' => '2c');
$db[] = array('row' => 3, 'col' => 1, 'value' => '3a');
$db[] = array('row' => 3, 'col' => 2, 'value' => '3b');
$db[] = array('row' => 3, 'col' => 3, 'value' => '3c');
$db[] = array('row' => 4, 'col' => 1, 'value' => '4a');
$db[] = array('row' => 4, 'col' => 2, 'value' => '4b');
$db[] = array('row' => 4, 'col' => 3, 'value' => '4c');

echo "<table>\n";

$lastRow = 1;
echo "<tr>";
foreach ($db as $line)
{
    if($lastRow != $line['row']) echo "</tr>\n<tr>";
    echo "<td>$line[value]</td>";
    $lastRow = $line['row'];
}
echo "</tr>\n";

echo "</table>\n";

Očekávaný výstup:
<table>
<tr><td>1a</td><td>1b</td><td>1c</td></tr>
<tr><td>2a</td><td>2b</td><td>2c</td></tr>
<tr><td>3a</td><td>3b</td><td>3c</td></tr>
<tr><td>4a</td><td>4b</td><td>4c</td></tr>
</table>

Doufám, že si to dokáže aplikovat na while ($line = mysql_fetch_assoc($query))
Tronicken
Profil *
Vypadá to pěkně, akurát v jekém formátu mám pak ukládat data do databáze?
A jak mám pak specifikovat mysql dotaz pro promměné?

Do databáze asi oddělit od sebe # jak psala Tori a pak to rozdělit pomocí explode, ale jak to mám aplikovat na ten script?
Alphard
Profil
1. Formát tabulky je na druhém řádku mého příspěvku.
2. Dotaz na databázi je v komentáři v mém příspěvku.

3. „Do databáze asi oddělit od sebe # jak psala Tori
V žádném případě, vy jste Tori i další odpovídající svými nevhodnými implementacemi zahnal do slepé uličky. Příště více okomentujte čeho se snažíte dosáhnout, neformulujte jen problém, na kterém jste se zasekl a který je prakticky jen důsledkem chybného návrhu. Bylo potřeba skoro 20 příspěvků než jsme se dostali k tomu, co vlastně řešíte.

ale jak to mám aplikovat na ten script?
Nevím, který myslíte, ale ukládání do databáze vymyslete sám. Snad je vám jasné, jak má vypadat výsledek, viz. pole v mé ukázce. Je to docela jednoduché, opět to bude nějaký cyklus.
Tori
Profil
Alphard:
Áha, takhle to teda chtěl! :) Děkuju, neuměla jsem správně položit otázku, čeho vlastně chce dosáhnout.
Tronicken
Profil *
Děkuju za reakce.

Jenom mi furt není jasné, jak mám získat tuto část scriptu, jelikož buď jsem natvrdlý, nebo fakt nechápu -

$db = array();
$db[] = array('row' => 1, 'col' => 1, 'value' => '1a');
$db[] = array('row' => 1, 'col' => 2, 'value' => '1b');
$db[] = array('row' => 1, 'col' => 3, 'value' => '1c');
$db[] = array('row' => 2, 'col' => 1, 'value' => '2a');
$db[] = array('row' => 2, 'col' => 2, 'value' => '2b');
$db[] = array('row' => 2, 'col' => 3, 'value' => '2c');
$db[] = array('row' => 3, 'col' => 1, 'value' => '3a');
$db[] = array('row' => 3, 'col' => 2, 'value' => '3b');
$db[] = array('row' => 3, 'col' => 3, 'value' => '3c');
$db[] = array('row' => 4, 'col' => 1, 'value' => '4a');
$db[] = array('row' => 4, 'col' => 2, 'value' => '4b');
$db[] = array('row' => 4, 'col' => 3, 'value' => '4c');

prostě nechápu jak to mám vytvořit pro proměnné? A ještě když je více hodnot v jednom sloupečku databáze?


Dodatek - když to "rozsekám" pomocí explode, tak dostanu něco v tomto stylu.

Array ( [0] => 1a [1] => 2a [2] => 3a [3] => 4a )

Jak to ale přiřadit?


Upřesnění explode()

print_r(explode('##', $p['tabulka'], -1));
Tronicken
Profil *
Tak mi s tím prosím někdo pomožte.. Pro většinu z vás banalitka, pro mě neřešitelný problém..
Děkuji
Alphard_
Profil *
Tronicken:
Vždyť je to úplně jednoduché. Nevidíte systém transformace mezi [#15] a tím polem [#21]? Každé číslo tam má smysl, podle value si myšlenkově spárujte řádek s každou buňkou tabulky a zamyslete se nad ostatními čísly. Je to trochu jako rovinná kartézská soustava souřadnic.
Tronicken
Profil *
Alphard:
Nevidíte systém transformace mezi [#15] a tím polem [#21]?

Právě že nevidím.. Kdyby sem viděl tak se neptám. Nedokážu si to nějak převést do souvislostí.

podle value si myšlenkově spárujte řádek s každou buňkou tabulky

Není problém dát místo například místo "4a" hodnotu z databáze.. Problém je v tom, že v databázové buňce (přímo v databázi) mám více hodnot z více inputů.
Nebo snad vážně stále nechápete jakým způsobem ukládám data do databáze?
Alphard
Profil
Tronicken:
Problém je v tom, že v databázové buňce (přímo v databázi) mám více hodnot z více inputů.
Nemáte (nebo podle mého návrhu nemáte mít), já nevím, proč jste o tom pořád přesvědčen. Z těch ukázek je přece jasná struktura, že každá buňka má v db vlastní řádek.
Já to neumím vysvětlit jinak.
Můžete si přečíst o normalizaci databáze, seriál na linuxsoftu, nebo si kupte knihu o relačních databázích. Nebo možná pro vás není programování optimální obor.
Tronicken
Profil *
Alphard:
že každá buňka má v db vlastní řádek

Tak ještě jednou zopakuji že nemá! Vím že to není nejideálnější řešení, mno v tomto případě asi jediné a to ze dvou důvodů
- 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) dynamický počet inputů (klidně 200)

Kvůli těmto dvěma důvodům je pro mě nereálné použití pokaždé nového řádku pro to aby každá buňka měla jeden řádek. Proto jsem psal o explode, nevím ale jak ho poté "aplikovat" a to je hlavní důvod mého dotazu "Jak přiřadit něco někam, aneb jak dostat zpátky ve stejném tvaru hodnoty které tam vložím" - přesněji byl můj původní dotaz "Jak mám nějakou vytáhnutou hodnotu z databáze a přiřadit ji k nějaké buňce v tabulce". Na to mi krásně odpověděl abc, jeho řešení má ovšem jednu chybu - jeden řádek tabulky se nechová jako jeden řádek tabulky = když se v jedné buňce zalomí text, zalomí se text jenom v té buňce a nezalomí se celý řádek.


Dodatek - pokud mi stále nerozumíte, přečtěte si prosím ještě jednou [#12], ať pochopíte systém ukládaní dat.

Pak u výpisu potřebuju tabulku

1a 1b 1c
2a 2b 2c
3a 3b 3c
4a 4b 4c
5a 5b 5c

KDY

1a 2a 3a 4a 5a - je JEDNA buňka v databázi
1b 2b 3b 4b 5b - je DRUHÁ buňka v databázi
1c 2c 3c 4c 5c - je TŘETÍ buňka v databázi
« 1 2 »

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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