Výpis z mysql.
Zdravím všechny kodery i nekodery...
Potřeboval bych od Vás helpnout s výpisem z db.
Na této stránce Country
Mám výpis alb. Výpis se dělá podle interpreta který je zadaný v odkazu viz.
http://www.country.funsite.cz/zobraz.php?stranka=2 &interpret=Alabama
Takže by se měla zobrazovat jen alba od Alabamy, a teď nastává ten problém, pokud je v db stejný název albumu ikdyž pod jiným interpretem tak ho to stejně zobrazí (klikni na název albumu).
Viz na stránce výše album Greatest Hits
Prosím Vás může mi někdo poradit? Děkuji jsem vděčný za kažfou radu.
Zde je kod.
<?php
define('DB_CHARSET', 'UTF-8');
require "settings.php";
?>
<?php
/// stránkování
$stranka=isset($_GET['stranka']) ? (int)$_GET['stranka'] : 1;
$limit=5;
$start=($stranka -1)*$limit;
// /stránkování
$albs=Array();
$pocetAlb=0;
If(isset($_GET['interpret'])) {
$where="WHERE Contentgroup='".mysql_real_escape_string($_GET['interpret'])."'";
$interpretQ='&interpret='.RawUrlEncode($_GET['interpret']);
}
Else {
$where='';
$interpretQ='';
}
$q=MySQL_Query($sql="SELECT (SELECT COUNT(Album) FROM (SELECT * FROM country $where GROUP BY Album ) p) AS pocet,Album FROM country $where GROUP BY Album ORDER BY `Year` LIMIT $start,$limit ") or die(mysql_error());
//echo $sql;
While($r=MySQL_Fetch_Assoc($q)) {
$albs[]=mysql_real_escape_string($r['Album']);
$pocetAlb=$r['pocet'];
}
$query = "SELECT Title,Artist,Album,Track,Year,Length,Composer,Filename,Albumartist,Genre,Contentgroup,Publisher FROM country WHERE Album IN('".(Implode("','",$albs))."') ORDER BY FIELD(Album,'".(Implode("','",$albs))."'),Album ASC,Track ASC";
$results = mysql_query($query) or die(Mysql_error());
$aktAlbum='';
$i=0;
$a=0;
While($result=MySQL_Fetch_Assoc($results)) {
$lastResult=$result; // uchová poslední výsledek v proměnné (pro výpis Vydavatele u posledního alba)
If($aktAlbum!=$result['Album']) {
If($aktAlbum!='') {
$a++;
?>
</tbody>
</table>
<div class="oddelovac"> </div>
<?php } ?>
<h1 onclick="hideshow(<?=$a?>)"><?php echo htmlSpecialChars($result['Album'],ENT_QUOTES); ?></h1>
<h3><?php echo htmlSpecialChars($result['Albumartist'],ENT_QUOTES); ?></h3>
<h3><?php echo htmlSpecialChars($result['Year'],ENT_QUOTES); ?></h3>
<?php print "\t\t" . '<img width="100" height="100" src="/'.$_GET['interpret'].'/' . $result['Album'] .'.jpg">' . "\n"; ?>
<h3>Vydavatel: <td><?php echo htmlSpecialChars($result['Publisher'],ENT_QUOTES); ?></td> </h3>
<table width="100%">
<thead>
<tr><th><a href=""><img src="img/download.png" width="150" height="50" alt="Download" /></a></th></tr>
<tr>
<th class="title">Track</th>
<th class="title">Title</th>
<th class="title">Artist</th>
<th class="title">Genre</th>
<th class="title">Composer</th>
<th class="title">Length</th>
<th class="title">Filename</th>
</tr>
</thead>
<tbody>
<?php
$aktAlbum=$result['Album'];
$i=0;
}
$i++;
?>
td><?php echo htmlSpecialChars($result['Filename'],ENT_QUOTES); ?></td>
</tr>
<?php
}
?>
</tbody>
</table>
Tak to mi silně zavání špatným návrhem databáze. U správně navržené databáze bys napsal něco jako:
Databáze je navržená podle souboru CSV který obsahuje veškeré informace o albech. Tudíž je databáze dělaná přesně podle CSV.
Jedno CSV sem upnu pro info.
Jedné tabulce bych opravdu neříkal databáze. A je to přesně tak, jak jsem očekával, vlastně ještě horší. Očekával jsem špatný návrh databáze a tady není žádný. Celé bys to měl rozdělit do několika tabulek (minimálně Interpret, Album, Skladba), dále by každá tabulka měla mít sloupec s primárním klíčem. Pak už by se dalo mluvit o databázi. Dokud to takhle neuděláš, tak budeš neustále řešit podobné problémy.
No tak tabulku mám jednu a to country, a v ní jsou sloupce podle práve CSV
1 Title varchar(255) utf8_general_ci
2 Artist varchar(255) utf8_general_ci
3 Albumartist varchar(255) utf8_general_ci
4 Genre varchar(255) utf8_general_ci
5 Album varchar(255) utf8_general_ci
6 Track tinyint(3) UNSIGNED
7 Year int(11)
8 Length int(11)
9 Composer varchar(255) utf8_general_ci
10 Filename varchar(255) utf8_general_ci
11 Publisher varchar(255) utf8_general_ci
12 Contentgroup varchar(255) utf8_general_ci
To myslíš že je to špatně?
Nevím jak bych to uploadoval kdyby měla být na všechno samostatná tabulka.
Špatně je velmi slabé slovo. Můžeš to uploadovat jako několik souborů. Můžeš to uploadovat jako textový soubor, obsahující insert příkazy. Můžeš to uploadovat i jako CSV soubor, ale pak si budeš muset naprogramovat rozsekání do samostatných tabulek. Nejjednodušší a v praxi nejpoužívanější je asi ten soubor s insert příkazy.
Ok dejme tomu...
Řešení toho co mám teď je nějaké aniž bych to musel celé předělávat podle tebe?
Díky.
select * from country where artist = 'Alabama'
Tohle je k ničemu, pomohlo mi toto
Takže je kod
Ale i tak ti díky.
Já s tím uplně jako db programátor nesouhlasím, něco jiného jsou NF a něco jiného je pokud je systém výkonově nefunkční - u nás třeba nedodržujeme ani první NF, protože jedině tak to to náš systém výkonově zvládá. Pokud to má v CVS, nechal bych to takhle - tranformace je akorád riziko, že se mu někde něco ztratí apod. Bud takhle a nebo takhle + transformovaná kopie. NF jsou fajn, ale musí přinést benefit, neni třeba je považovat za dogma.
Něco jiného je nedodržovat NF z důvodů, že jejich dodržení přinese víc škody užitku, a něco jiného z důvodu, že vůbec netuší, že nějaké NF existují.
Bruce Lee, ale neřešil NF - pokud se mu nelibil nějakej chvat jak někomu zlomit haxknu, tak bych se ho v jeho pozici taky radeji naučil i kdyby se mi hodně nelibil
Ačkoliv je to pěkná věta a užasný citátch, který si určitě příštích 72 hodin budu pamatovat ;)
NF určitě neřešil, to je pravda. Ale i tak se to dá použít téměř na všechno. Nejdřív je nutné pravidla znát, aby člověk věděl, kdy je vhodné je nepoužít či porušit.
Tehle citát si pamatuju asi 18 let.
Jediný citát, který si pamatuju takhle dlouho (ok, ta trošku mín vzhledem k mému věku) je ten, který řikala učitelka na základce: "Chraň si oči pro krásy přírody". (A možná ještě "azore neser" - autoru je spousta )
Je jedno jestli tuším nebo ne, Tohle co mám pro mojí potřebu stačí. Více nepotřebuji.
Funguje to přesně jak chci.