| Autor | Zpráva | ||
|---|---|---|---|
| MartinXYZ Profil * |
#1 · Zasláno: 18. 9. 2014, 11:15:20
Ahoj ve spolek,
s MySQL teprve začínám, proto moc prosím někoho zdatného, kdo by mi poradil, jak na to :-). V databázi mám několik tabulek, např. názvy: "Prvni", "Druha", "Treti", atd. V každé tabulce mám dva sloupečky, např.: "Jmeno" a "Cislo" s vyplněnými hodnotami. Jak docílit toho, aby se mi vypsal strom všeho v databázi, např. takto (nejlépe abecedně řazené jak názvy tabulek tak i jejich hodnoty): Prvni - Aleš - 777000000 - Boris - 777111111 - Cyril - 777222222 Druha - Adam - 777000001 - Bára - 777000002 - Cecílie - 777000003 Treti - Alex - 777000011 - Bruno - 777000022 - Čeněk - 777000033 Doposud jsem se totiž naučil pouze vypsat hodnoty z jedné předem definované tabulky, jejíž název znám. Ale já potřebuju nějak docílit toho, aby to vypsalo opravdu všechny tabulky a jejich hodnoty z databáze. Předem děkuji za jakékoliv rady :-) Martin |
||
| Tori Profil |
#2 · Zasláno: 18. 9. 2014, 11:31:17
V databázi
information_schema jsou všechna metadata, názvy databází, tabulek, sloupců, dat. typy atd.
|
||
| juriad Profil |
#3 · Zasláno: 18. 9. 2014, 12:04:22
MartinXYZ:
Mimochodem, pokud jsou všechna data stejné povahy, dává smysl držet všechny informace v jediné tabulce a jen přidat jeden sloupec, který určí u každého záznamu, jakého je typu. Některé časteji řešené dotazy pro MySQL - FAQ » Nová tabulka/sloupec pro každý záznam |
||
| MartinXYZ Profil * |
#4 · Zasláno: 18. 9. 2014, 13:37:41 · Upravil/a: MartinXYZ
juriade, díky.
Takže, jestli tomu dobře rozumím, budu mít jen jednu tabulku o třech sloupcích (např. Typ, Jméno, Číslo): Typ --------- Jméno --------- Číslo ========================== Práce ------- Aleš -------- 777xxxxxx Práce ------- Boris ------- 777yyyyyy Práce ------- Cyril -------- 777zzzzzz Škola ------- Adam ------ 776xxxxxx Škola ------- Bára ------- 776yyyyyy Škola ------- Cecílie ----- 776zzzzzz Ale nevím, jak mám udělat, aby se mi vypsal "strom" - takže nejprve získaný název "Práce" a pod ním všechny dané osoby, dále název "Škola" a pod ním zase všechny jeho osoby, atd. Děkuji, M. Výsledek by tedy měl být asi takovýto: Práce - Aleš - 777000000 - Boris - 777111111 - Cyril - 777222222 Škola - Adam - 777000001 - Bára - 777000002 - Cecílie - 777000003 |
||
| Alphard Profil |
#5 · Zasláno: 18. 9. 2014, 13:44:59
Viz Nejčastější potíže s PHP (FAQ) » Nadpis skupiny nejen při výpisu z databáze
Do budoucna by bylo dobré něco si přečíst o navrhování databází. Opravovat jednotlivé chyby až při konkrétních prolémech je značně neefektivní. |
||
| juriad Profil |
MartinXYZ:
Zkusím jít ještě dál: tabulka osoby ( id - int - primární klíč jmeno - varchar ) tabulka skupiny ( id - int - primární klíč název - varchar ) tabulka osoby_ve_skupinach ( id_osoby - int - cizí klíč id_skupiny - int - cizí klíč složený primární klíč ) tabulka typy_kontaktů ( id - int - primární klíč typ - varchar ) tabulka kontakty ( id - int - primární klíč id_osoby - int - cizí klíč id_typu - int - cizí klíč kontakt - varchar ) S tímto schématem můžeš mít lidi v různých skupinách; jedna osoba může být i ve více. Ke každé osobě můžeš mít libovolný počet kontaktů nejrůznějších typů - i více kontaktů stejného typu. Takto nějak se navrhují databáze. Snažíš se, aby struktura byla co nejflexibilnější. A až potom se staráš o dotazy. Například dotaz na seznam telefonů osob ze skupin Práce a Škola: SELECT s.název, o.jméno, k.kontakt
FROM osoby o
JOIN osoby_ve_skupinách ovs ON o.id = ovs.id_osoby
JOIN skupiny s ON s.id = ovs.id_skupiny
JOIN kontakty k ON k.id_osoby = o.id
JOIN typy_kontaktů tk ON tk.id = k.id_typu
WHERE s.název IN ('Práce', 'Škola') AND tk.typ = 'telefon'
ORDER BY s.název, o.jménoTen dotaz je sice o něco delší (toto je extrém), ale umožňuje ti pokládat i dotazy typu: potřebuju telefon nebo email na Pepu, ale nevím v jaké je skupině. Všimni si ještě, že ať už přidáš novou osobu, nový typ kontaktu, novou skupinu, tak se nikdy nezmění počet ani názvy tabulek nebo sloupců. Celá aplikace bude fungovat stále stejně, jen přibude obsah tabulek v databázi. |
||
| MartinXYZ Profil * |
#7 · Zasláno: 20. 9. 2014, 16:47:33
Ahoj,
děkuju všem. Juriade - tohle je na mě příliš, jsem vážně úplný začátečník, takže tohle bych nezvládl :-), ale i tak díky! Nakonec jsem to po dvou dnech nějak sesmolil podle Alpharda a jeho odkazu na "Název skupiny". Vytvoril jsem tabulku TABULKA se sloupci TYP (obsahuje škola, práce, atd.), JMENO a CISLO... A udělal jsem tedy tento kód, který celkem funguje. Ale prosím někoho znalého, aby mi to zkontroloval, jestli jsem neudělal nějakou zásadní chybu, která by mohla způsobovat potíže... :-) <?
$pripojit = MySQL_Connect("server", "uzivatel", "heslo") or Die(MySQL_Error());
MySQL_Select_Db("databaze") or Die(MySQL_Error());
$dotaz = "SELECT typ, jmeno, cislo FROM tabulka ORDER BY typ, jmeno";
$vysledek = mysql_query($dotaz);
if(!$vysledek){
echo mysql_error() . " - " . mysql_errno();
}
else{
$pamet = '';
while ($radek = mysql_fetch_assoc($vysledek)){
if ($radek['typ'] != $pamet){
$pamet = $radek['typ'];
echo "<b>".$pamet."</b><br>";
}
echo $radek['jmeno'].", ".$radek['cislo']."<br>";
}
}
?>Děkuji všem, Martin |
||
|
Časová prodleva: 12 let
|
|||
0