Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem 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='&amp;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>


Předmět Autor Datum
Tak to mi silně zavání špatným návrhem databáze. U správně navržené databáze bys napsal něco jako:…
Wikan 19.05.2012 13:50
Wikan
Databáze je navržená podle souboru CSV který obsahuje veškeré informace o albech. Tudíž je databáze…
Gizzer 19.05.2012 13:52
Gizzer
Jedné tabulce bych opravdu neříkal databáze. A je to přesně tak, jak jsem očekával, vlastně ještě ho…
Wikan 19.05.2012 14:10
Wikan
No tak tabulku mám jednu a to country, a v ní jsou sloupce podle práve CSV 1 Title varchar(255) utf…
Gizzer 19.05.2012 14:18
Gizzer
Špatně je velmi slabé slovo. Můžeš to uploadovat jako několik souborů. Můžeš to uploadovat jako text…
Wikan 19.05.2012 14:23
Wikan
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í…
Gizzer 19.05.2012 14:26
Gizzer
select * from country where artist = 'Alabama'
Wikan 19.05.2012 14:39
Wikan
Tohle je k ničemu, pomohlo mi toto $where=Str_Replace('WHERE','AND',$where); Takže je kod <?php /…
Gizzer 19.05.2012 17:45
Gizzer
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…
AZOR 20.05.2012 14:55
AZOR
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…
Wikan 20.05.2012 15:02
Wikan
Bruce Lee, ale neřešil NF - pokud se mu nelibil nějakej chvat jak někomu zlomit haxknu, tak bych se…
AZOR 20.05.2012 15:04
AZOR
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é pravid…
Wikan 20.05.2012 15:09
Wikan
:-) Jediný citát, který si pamatuju takhle dlouho (ok, ta trošku mín vzhledem k mému věku) je ten, k…
AZOR 20.05.2012 15:18
AZOR
Je jedno jestli tuším nebo ne, Tohle co mám pro mojí potřebu stačí. Více nepotřebuji. Funguje to pře… poslední
Gizzer 20.05.2012 16:23
Gizzer

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.

Tohle je k ničemu, pomohlo mi toto

$where=Str_Replace('WHERE','AND',$where);

Takže je kod

<?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='&amp;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'];
}

$where=Str_Replace('WHERE','AND',$where);	// přepsání where pro vyhledávání alb interpreta
$query = "SELECT Title,Artist,Album,Track,Year,Length,Composer,Filename,Albumartist,Genre,Contentgroup,Publisher FROM country WHERE Album IN('".(Implode("','",$albs))."') {$where} 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++;
		
?>

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.

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 :-D

Ačkoliv je to pěkná věta a užasný citátch, který si určitě příštích 72 hodin budu pamatovat ;)

Zpět do poradny Odpovědět na původní otázku Nahoru