Avatar billede delphiuser Mester
15. april 2012 - 12:33 Der er 4 kommentarer og
1 løsning

den vil ikke tælle poster

Hej eksperter...

Jeg har et lille problem med af få min mysql_query til at ville tælle poster i en database hvor at den bruger id nummer fra en tabel som skal findes i en anden tabel hvorfra den så finder ud af hvor mange poster der er med de respektive ens numre.

jeg har 2 tabeller jeg bruger i dette script. men det vil ikke som jeg vil.

de følgende tabeller ser sådan her ud.

tabellen genre:

CREATE TABLE `genre` (
  `gid` int(11) NOT NULL auto_increment,
  `genre` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`gid`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;

tabellen mp3:

CREATE TABLE `mp3` (
  `mid` int(11) NOT NULL auto_increment,
  `title` varchar(255) NOT NULL default '',
  `genre` varchar(255) NOT NULL default '',
  `artist` varchar(255) NOT NULL default '',
  `album` varchar(255) NOT NULL default '',
  `cover` varchar(255) default NULL,
  `url` varchar(255) NOT NULL default '',
  `dato` varchar(50) NOT NULL default '',
  PRIMARY KEY  (`mid`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

her kommer så min kode jeg bruger pt. men den virker ikke og har nu prøvet forskellige løsninger....

<?php
    $genre = mysql_query("select gid, genre from genre order by genre") or die(mysql_error());
    $result = mysql_query("select count(*) from genre, mp3 where gid='genre'") or die(mysql_error());
    if(mysql_num_rows($genre) == 1) {
        while($row = mysql_fetch_array($genre, $result)) {
           
            echo '<tr><td>'.$row[''].' ('.$result.')</td></tr>';
        }
    } else {
        echo '<tr><td>Der er ikke nogen genre som er registreret endnu...</td></tr>';
    }
    ?>

håber i kan fortælle mig hvad min fejl er. og gerne vise mig den.
på forhånd tak for hjælpen.

Delhpiuser
Avatar billede delphiuser Mester
15. april 2012 - 12:35 #1
Jeg får forresten denne fejl her.

(Resource id #5)

ved ikke lige hvad den betyder.
Avatar billede vagnk Juniormester
15. april 2012 - 13:27 #2
Umiddelbart kan jeg se at du har to queries lige efter hinanden, hvor du overhovedet ikke behandler den første. Du har lidt rod her, men lad os tage det lidt ad gangen.

Feltet genre er varchar(255) i begge tabeller. Det tyder på et misforstået forsøg på normalisering. Hvis du vil normalisere dem mere korrekt gør du genre i genre-tabellen til en id og kald den bare gid. Så vil du i den store tabel med mange rækker have en gid der peger hen på en gid i den lille tabel med få rækker og derved dels spare plads og dels hjælpe databasemotoren. Det kan senere forfines idet jeg regner med at et mp3-nummer kan gå ind i flere genrer, men indtil videre rækker det.

Når du har lavet det kan du joine de to tabeller således:
SELECT t1.gid, genre FROM genre t1, mp3 t2
WHERE t1.gid = t2.gid
ORDER BY t1.genre;

eller

SELECT t1.gid, genre FROM genre t1
JOIN mp3 t2 ON t1.gid = t2.gid
osv...
Læg mærke til at jeg i begge tilfælde tager den lille tabel først. Det har måske ikke den store betydning idag med de clock-frekvenser maskinerne kører med, men i gaaaamle dage havde det stor betydning at databasemotoren kunne have hele den lille tabel i memory i et hug. Som sagt det er vist mest æstetik for feinschmeckere.

Den anden med count():
Når du har kaldt mysql_query skal du bagefter kalde f.eks. mysql_result og behandle de data som mysql_query har sendt dig. Resten tager vi når du har JOIN på plads.
Avatar billede Slettet bruger
15. april 2012 - 13:27 #3
Hvis du tager et kig på PHP's dokumentation om mysql_fetch_array()-funktionen vil du kunne læse dig til, at du bruger funktionen forkert - du kan ikke give den 2 MySQL Results ($genre & $result) på én gang!

Dernæst kan jeg ikke se hvorfor du laver de 2 queries, som du viser.
Er det dine mp3-numre, som du vil loope igennem og tælle genres ud fra, eller hvad er det helt præcist du vil opnå?
Avatar billede delphiuser Mester
18. juni 2012 - 14:13 #4
lukker
Avatar billede vagnk Juniormester
18. juni 2012 - 14:55 #5
Fandt du ud af noget vi andre kan lære af?
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