Autor | Zpráva | ||
---|---|---|---|
KOM Profil * |
#1 · Zasláno: 12. 3. 2016, 12:19:10
Ahoj, vypisuji z DB fotografie takto:
} $colname_kategorie_vypis = "-1"; if (isset($_GET['kategorie_id'])) { $colname_kategorie_vypis = $_GET['kategorie_id']; } mysql_select_db($database_pripojeni_MySQL, $pripojeni_MySQL); $query_kategorie_vypis = sprintf("SELECT * FROM kategorie WHERE kategorie_id = %s", GetSQLValueString($colname_kategorie_vypis, "int")); $kategorie_vypis = mysql_query($query_kategorie_vypis, $pripojeni_MySQL) or die(mysql_error()); $row_kategorie_vypis = mysql_fetch_assoc($kategorie_vypis); $totalRows_kategorie_vypis = mysql_num_rows($kategorie_vypis); if($colname_kategorie_vypis == "3") { $where = ""; } else { $where = " WHERE kategorie_id = " . GetSQLValueString($colname_kategorie_vypis, "int"); } $query_kategorie_fotky = "SELECT * FROM fotografie" . $where . " ORDER BY datum_vlozeni DESC"; $kategorie_fotky = mysql_query($query_kategorie_fotky, $pripojeni_MySQL) or die('fotky' . mysql_error()); $row_kategorie_fotky = mysql_fetch_assoc($kategorie_fotky); $totalRows_kategorie_fotky = mysql_num_rows($kategorie_fotky); ?> html: <img class="kategorie_vypis_fotky stin" src="fotky/<?php echo $row_kategorie_fotky['kategorie']; ?>/<?php echo $row_kategorie_fotky['fotka']; ?>_nahled.jpg" alt=""> živá ukázka: www.kom72.cz/index.php?stranka=kategorie V DB mám dve tabulky: fotografie a kategorie. ID jednotlivych kategorií v tabulce kategorie = sloupci **kategorie_id** v tabulce fotografie, ktery urcuje, kde se fotka zobrazi. K tomu je jeste v teto tabulce sloupec **kategorie**, ktery urcuje, v ktere slozce je fotografie ulozena. Potreboval bych mit moznost, fotografii priradit vice kategorií v kterych bude zobrazena. Zrejme bych zvladnul toto: zrusim ulozeni fotek ve slozkach a vsechny budou v jedne slozce dohromady. V DB, fotce priradim jeste dalsi treba 3 sloupce: kategorie_id2, kategorie_id3 atd. a tam zapisu v kterych kategoriích muze byt fotka jeste zobrazena. Samozrejme to musi jit nejak elegantneji. Nasmeruje mne nekdo, jak na to? Jen upozornuji, ze PHP moc nerozumim. I ty zakladni prikazy mi trvaji dny, nez je jakz takz pochopim... |
||
juriad Profil |
#2 · Zasláno: 12. 3. 2016, 12:29:13
Některé časteji řešené dotazy pro MySQL - FAQ » Musíte pojmenovávat sloupce s indexem (jmeno1, jmeno2, jmeno3, …)
Pro propojení fotek a kategorií vytvoř samotnou tabulku, která bude mít jen dva sloupce: id_fotky, id_kategorie
|
||
Dan Charousek Profil |
Ještě dodám, že bys neměl používat funkce z rodiny mysql_*
Když se budeš porozhlížet po alternativách, tak rovnou doporučím NotORM od Jakuba Vrány, které propojování více tabulek extrémně usnadňuje. Implementace je triviální a ušetří to člověku spoustu starostí. Řešení tvého problému by pak mohlo vypadat takto: kategorie ------------ id | name | folder_name 1 Krajina a příroda krajina_a_priroda 2 Zvířata zvirata ... fotografie ------------ id | name | file_name 1 Pes v přírodě foto001.png fotografie_kategorie --------------------------- id_fotografie | id_kategorie 1 1 1 2 V kódu je pak použití pomocí NotORM hračka: <?php require_once "NotORM.php"; $pdo = new PDO('mysql:host=127.0.0.1;dbname=jmeno_databaze' , 'uzivatel', 'heslo'); $db = new NotORM($pdo); $kategorie_zvirata = $db->kategorie[2]; // proiteruji nad všemi fotkami v kategorii: foreach($kategorie_zvirata->fotografie_kategorie() as $connection) { echo '<img src="/kategorie/' . $kategorie_zvirata['folder_name'] . '/' . $connection->fotografie['file_name'] . '" alt="' . $connection->fotografie['name'] . '">'; } edit: Omylem jsem to odeslal namísto náhledu :) |
||
KOM Profil * |
#4 · Zasláno: 12. 3. 2016, 14:56:13
Dan Charousek:
diky moc za ukazku, ale zatim asi na pochopeni a zaiplemetovani do jiz vytvoreneho, zkusim Vazbu many-to-many (M:N). Kzdopade po rozchozeni celeho webu se timhle prechodem nekde bokem zacnu zabyvat. Poradite mi jeste, jak pak vypsat tu Vazbu M:N? vytvoril jsem tabulku fotografie_kategorie, kde mam 2 sloupce a ruzne vazby mezi fotografiemi a kategoriemi. Ale rozbehat to.. to je na mne moc :-( |
||
Alphard Profil |
#5 · Zasláno: 12. 3. 2016, 16:56:03
select * from fotky f left join spojovací s on f.id = s.id_fotky left join kategorie k on k.id = s.id_kategorie where k.id = 5 left join kategorie k on k.id = s.id_kategorie and k.id = 5 , což je mírně rychlejší, ale nechci vás teď mást.
Výpis v PHP už bude obyčejný cyklus. |
||
KOM Profil * |
#6 · Zasláno: 12. 3. 2016, 19:29:48
to oznacovani fotek v te spojovaci tabulce, bude pakarna. prijde mi, ze by bylo mnohem lepsi (pro mne) mit moznost kategorii_id u fotek moci priradit vice kategorii. Nedovedu si predstavit takhle upravovat treba 100 fotek
|
||
Fisir Profil |
#7 · Zasláno: 12. 3. 2016, 19:45:04
Reaguji na KOMa:
„oznacovani fotek v te spojovaci tabulce, bude pakarna“ Ne, je to správný a časem prověřený způsob, jak takovéhle situace zvládat. Je to součást správného návrhu databáze. „Nedovedu si predstavit takhle upravovat treba 100 fotek“ Tak si na to udělej administrační rozhraní a neupravuj přímo databázi. |
||
KOM Profil * |
#8 · Zasláno: 12. 3. 2016, 20:06:12
ok, dekuji za info
|
||
Časová prodleva: 9 let
|
0