Autor Zpráva
KOM
Profil *
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
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 *
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
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
Takhle se vyberou všechny fotky patřící do kategorie 5. Tu podmínku kategorie by šlo přesunout do joinu a vzniklo by 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 *
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
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 *
ok, dekuji za info

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