Avatar billede hansen24aar Nybegynder
02. november 2005 - 21:06 Der er 29 kommentarer

hjææælp til categori opdeling

Jeg er igang med at lave en søgeside på min hjemmeside. Men jeg vil gerne lave en categori opdeling. sådan at det som ligger i min database bliver hentet frem i de forskellige categorier de har.

Lad os antage det er over musik....

så skal det fordeles ud i forskellige categorier som er:

Blues
Techno
Rap
Rock
Dance
Trance
Pop
Klassisk
Rave
osv.

Hvordan laver man det så at det som ligger i ens database bliver fordelt på den måde og hvis jeg skal lave en ny tabel hvad skal den så indeholde. min hoved tabel ser sådan her ud...

CREATE TABLE `musik` (
`id` BIGINT NOT NULL AUTO_INCREMENT ,
`titel` VARCHAR( 50 ) NOT NULL ,
`artist` VARCHAR( 50 ) NOT NULL ,
`album` VARCHAR( 50 ) NOT NULL ,
`tid` VARCHAR( 25 ) NOT NULL ,
`type` VARCHAR( 25 ) NOT NULL ,
`genre` VARCHAR( 25 ) NOT NULL ,
PRIMARY KEY ( `id` )
) TYPE = MYISAM ;

tænkte på om man kunne fordele dem ud via genre...

håber i vil hjælpe mig...
Avatar billede hmortensen Nybegynder
02. november 2005 - 21:11 #1
Du kan lave en relation:
Ændre genre til en integer, og så lave en ny tabel med auto id og genre navn.
Avatar billede hansen24aar Nybegynder
02. november 2005 - 21:12 #2
hvordan laver jeg den relation? kan du ikke beskrive det, og eventuelt vise det
Avatar billede hmortensen Nybegynder
02. november 2005 - 21:16 #3
CREATE TABLE `musik` (
`id` BIGINT NOT NULL AUTO_INCREMENT ,
`titel` VARCHAR( 50 ) NOT NULL ,
`artist` VARCHAR( 50 ) NOT NULL ,
`album` VARCHAR( 50 ) NOT NULL ,
`tid` VARCHAR( 25 ) NOT NULL ,
`type` VARCHAR( 25 ) NOT NULL ,
`genre` INT ( 11 ) NOT NULL ,
PRIMARY KEY ( `id` )
) TYPE = MYISAM ;

CREATE TABLE `genre` (
`id` INT (11) AUTO_INCREMENT,
`navn` VARCHAR ( 25 ),
PRIMARY KEY ( `id` )
) TYPE = MYISAM;

For at få vist:
SELECT * FROM musik m, genre g WHERE m.gerne = g.id && g.navn = 'Rock'
Avatar billede krydset Nybegynder
02. november 2005 - 21:17 #4
CREATE TABLE `musik` (
`id` BIGINT NOT NULL AUTO_INCREMENT ,
`titel` VARCHAR( 50 ) NOT NULL ,
`artist` VARCHAR( 50 ) NOT NULL ,
`album` VARCHAR( 50 ) NOT NULL ,
`tid` VARCHAR( 25 ) NOT NULL ,
`type` VARCHAR( 25 ) NOT NULL ,
`genre_id` id( 25 ) NOT NULL ,
PRIMARY KEY ( `id` )
) TYPE = MYISAM ;


CREATE TABLE `genre` (
`genre_id` BIGINT NOT NULL AUTO_INCREMENT ,
`genre_navn` VARCHAR( 50 ) NOT NULL ,
PRIMARY KEY ( `genre_id` )
) TYPE = MYISAM ;
Avatar billede hansen24aar Nybegynder
02. november 2005 - 21:20 #5
Når jeg så skriver noget ind i mine tabeller hvordan skal det input script så se ud?
for nu er der jo 2 tabeller som der skal skrives i på samme tid.

det kan godt ske jeg lige trækker lidt mere på din viden hvad det angår...
Avatar billede hmortensen Nybegynder
02. november 2005 - 21:24 #6
Først skriver du alle dine genre ind i genre tabellen.

Så når du indsætter et nyt stykke musik, skal gerne i musik tabellen være id'et på genren:

Genre:
1, rock
2, pop


Musik
1, dr. jones, aqua, aquaworld, 3:25, type?, 2
2, welcome home, metallica, and justice for all, 6:24, type?, 1
Avatar billede pidgeot Nybegynder
02. november 2005 - 21:26 #7
Nej, der skal kun skrives i en. Meningen er du på forhånd skal have fyldt genre op med de muligheder du vil have, og anvende de id'er der er i genre som værdien for genre-feltet i musiktabellen.

Du kan anvende en <select> på din input-side til at vælge blandt de eksisterende genrer.
Avatar billede hansen24aar Nybegynder
02. november 2005 - 21:28 #8
det vil sige at hvis techno har id nummer 1 skal jeg i min input form skrive 1 ud for genre?
Avatar billede hmortensen Nybegynder
02. november 2005 - 21:29 #9
Ja, eller gøre som pidgeot også skriver, lave en dropdown box til valg af genre.
Avatar billede hansen24aar Nybegynder
02. november 2005 - 21:29 #10
ok det lyder cool
Avatar billede hansen24aar Nybegynder
02. november 2005 - 21:35 #11
hvordan føre jeg det over i en <select name="genre"></select>
Avatar billede hmortensen Nybegynder
02. november 2005 - 21:37 #12
$sql = mysql_query("SELECT id, navn FROM genre ORDER BY navn");
while ($row = mysql_fetch_array($sql))
{
  echo '<option value="'.$row['id'].'">'.$row['navn'].'</option>';
}
Avatar billede hansen24aar Nybegynder
02. november 2005 - 21:38 #13
ok takker
Avatar billede pidgeot Nybegynder
02. november 2005 - 21:39 #14
<select name="genre">
<?
$genrequery=mysql_query('SELECT * FROM genre');
while ($genrerow=mysql_fetch_array($genrequery))
{
  echo('<option value="' . $genrerow['id'] . '">' . $genrerow['navn'] . '</option>');
}
?>
</select>

Du skal selvfølgelig lige rette til så de rigtige navne bruges for felterne - jeg ved jo ikke præcis hvilke navne du har valgt. :)
Avatar billede hansen24aar Nybegynder
03. november 2005 - 09:12 #15
dette her er noget jeg har rodet med hele natten...

hvordan får jeg de genre som står i min genre tabel. til at blive vist på en categori side hvor man kan klikke på den genre og derefter se hvad der er af musik?

skal helst se sådan her ud...

Rock(100) Blues(25) Techno(500)

altså at det som er i () fortæller hvor mange poster der er under hver genre?
Avatar billede hmortensen Nybegynder
03. november 2005 - 09:18 #16
Vil tro den her kan gøre det:
SELECT genre.navn, COUNT(*) as antal FROM genre, musik GROUP BY musik.genre
Avatar billede hansen24aar Nybegynder
03. november 2005 - 09:56 #17
ok

hvordan kan jeg få mine genre til at blive vist som links?
Avatar billede hmortensen Nybegynder
03. november 2005 - 09:58 #18
<a href="en side">...</a>
Avatar billede hansen24aar Nybegynder
03. november 2005 - 10:12 #19
ja ok den kender jeg. men kan jeg ikke gøre det ud fra min id og navn i min genre tabel?
Avatar billede hmortensen Nybegynder
03. november 2005 - 10:22 #20
Jo, samme princip som i eksemplet til drop down boksen.
Avatar billede hansen24aar Nybegynder
03. november 2005 - 10:27 #21
jeg har lavet en functions fil.

som indeholder denne del...
*************************************************************************************
function genre() {

$query = mysql_query("SELECT genre.navn, COUNT(*) as antal FROM genre, musik GROUP BY musik.genre");
$antal = mysql_result($query, 0);
echo "(";
echo $antal;
echo ")";

}
*************************************************************************************
og på min categories.php har jeg et skcript og et functions kald som ser sådan her ud.
*************************************************************************************
<?php
   
$sql = "
  SELECT
    *
  FROM
    genre
  ORDER BY
    id DESC
   
  ";
$qh = mysql_query( $sql ) or die ( mysql_error() );
if ( mysql_num_rows( $qh ) > 0 )
{
  while ( $row = mysql_fetch_assoc( $qh ) )
  {
    echo '<table border="0" width="400" align="center"><tr><td width="150"><a href="genre.php?id=' . $row['id'] . '">' . $row['navn'] . '</a>' genre();'</td></table>';
  }
}
?>
Avatar billede hansen24aar Nybegynder
04. november 2005 - 08:52 #22
jeg har nu fået det meste til at virke. men er nu støt på et andet problem...

når jeg tilføjer noget under min genre techno og vælger at få indholdet vist ved at trykke på linket techno kommer der ikke noget frem. jeg kan lige give jer de scripte jeg bruger...
*************************************************************************************
categories.php

<?php
   
$sql = "
  SELECT
    *
  FROM
    genre
  ORDER BY
    navn DESC
   
  ";
$qh = mysql_query( $sql ) or die ( mysql_error() );
if ( mysql_num_rows( $qh ) > 0 )
{
  while ( $row = mysql_fetch_assoc( $qh ) )
  {
    echo '<a href="genre.php?id=' . $row['id'] . '">' . $row['navn'] . '</a> | ';
  }
}

?>

*************************************************************************************
genre.php

<?php
$id = ( !empty( $_GET['id'] ) ? mysql_real_escape_string( $_GET['id'] ) : 0 );
$sql = sprintf( "
  SELECT
    *
  FROM
    musik
  WHERE
    id = 'genre'
  "
  ,$id
  );
$qh = mysql_query( $sql ) or die ( mysql_error() );
if ( mysql_num_rows( $qh ) > 0 )
{
  $row = mysql_fetch_assoc( $qh );
  echo '<table border="0"><tr><td><a href="artist.php?id=' . $row['id'] . '">' . $row['titel'] . '</a></td><td>' . $row['genre'] . '</td></tr></table>';
  echo "<center><a href=\"jokes.php\">Tilbage til jokes</a></center>";
}
else
{
  echo "<center>ingen nye indlæg</center>";
}
?>
*************************************************************************************

hvad er min fejl der?
Avatar billede hansen24aar Nybegynder
04. november 2005 - 08:54 #23
skal lige siges at min connection til min database ligger i en config fil...
Avatar billede hmortensen Nybegynder
04. november 2005 - 08:57 #24
Det er din sql den er gal med:

$sql = "SELECT * FROM musik WHERE genre = ".$id;

Det er tit en god idé at udskrive sin sql sætning hvis man opnår forkerte resultater.
Avatar billede hansen24aar Nybegynder
04. november 2005 - 09:05 #25
kan du fortælle mig hvorfor jeg ikke kunne få mine tæller til at virker ud for hver genre?

*************************************************************************************
jeg har lavet en functions fil.

som indeholder denne del...
*************************************************************************************
function genre() {

$query = mysql_query("SELECT genre.navn, COUNT(*) as antal FROM genre, musik GROUP BY musik.genre");
$antal = mysql_result($query, 0);
echo "(";
echo $antal;
echo ")";

}
*************************************************************************************
og på min categories.php har jeg et skcript og et functions kald som ser sådan her ud.
*************************************************************************************
<?php
   
$sql = "
  SELECT
    *
  FROM
    genre
  ORDER BY
    id DESC
   
  ";
$qh = mysql_query( $sql ) or die ( mysql_error() );
if ( mysql_num_rows( $qh ) > 0 )
{
  while ( $row = mysql_fetch_assoc( $qh ) )
  {
    echo '<table border="0" width="400" align="center"><tr><td width="150"><a href="genre.php?id=' . $row['id'] . '">' . $row['navn'] . '</a>' genre();'</td></table>';
  }
}
?>
Avatar billede hansen24aar Nybegynder
04. november 2005 - 09:45 #26
hvorfor viser den kun en og ikke alle dem under den kategori/genre ?

*************************************************************************************
<?php
$id = ( !empty( $_GET['id'] ) ? mysql_real_escape_string( $_GET['id'] ) : 0 );
$sql = sprintf( "
  SELECT
    *
  FROM
    musik
  WHERE
    genre = '$id'
  ORDER BY titel DESC
    LIMIT 25
  "
  ,$id
  );
$qh = mysql_query( $sql ) or die ( mysql_error() );
if ( mysql_num_rows( $qh ) > 0 )
{
  $row = mysql_fetch_assoc( $qh );
  echo '<table border="0"><tr><td><a href="artist.php?id=' . $row['id'] . '">' . $row['titel'] . '</a></td></tr></table>';
  echo "<center><a href=\"categories.php\">Tilbage til Kategori index</a></center>";
}
else
{
  echo "<center>ingen nye indlæg</center>";
}
?>
*************************************************************************************
Avatar billede hansen24aar Nybegynder
04. november 2005 - 10:23 #27
er der ikke en som kan fortælle mig hvorfor den ikke vil vise mere end 1 post selvom der er 5 poster
Avatar billede pidgeot Nybegynder
04. november 2005 - 12:52 #28
Fordi du ikke laver en løkke til at hente alle rækker. Ret

if ( mysql_num_rows( $qh ) > 0 )
{
  $row = mysql_fetch_assoc( $qh );
  echo '<table border="0"><tr><td><a href="artist.php?id=' . $row['id'] . '">' . $row['titel'] . '</a></td></tr></table>';
  echo "<center><a href=\"categories.php\">Tilbage til Kategori index</a></center>";
}


til:
if ( mysql_num_rows( $qh ) > 0 )
{
  while ($row = mysql_fetch_assoc( $qh ))
  {
    echo '<table border="0"><tr><td><a href="artist.php?id=' . $row['id'] . '">' . $row['titel'] . '</a></td></tr></table>';
  }
  echo "<center><a href=\"categories.php\">Tilbage til Kategori index</a></center>";
}
Avatar billede hansen24aar Nybegynder
19. december 2005 - 15:39 #29
hvordan får jeg den til at hvise hvis jeg trykker på den categori dom hedder Techno... Hvordan for jeg den så til at at skrive categori navnet i toppen min genre siden hvor den viser de numre som ligger under techno?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester