Avatar billede astrocomdk Nybegynder
24. juni 2008 - 17:21 Der er 8 kommentarer og
1 løsning

Problem med at join to tabeler

Hej

Jeg et problem med at få to tabeler i min mysql database.

Her er min database:

specialekategorier:
`id` int(10) unsigned NOT NULL auto_increment,
`KategoriNavn` varchar(255) character set latin1 collate latin1_danish_ci NOT NULL,
PRIMARY KEY  (`id`)

(1, 'DIVERSE'),
(2, 'IT'),
(3, 'TEKNIK'),

specialer:
`id` int(10) unsigned NOT NULL auto_increment,
`BrugerID` int(10) unsigned NOT NULL,
`BrugerNavn` text NOT NULL,
`SpecialeKategoriID` int(10) unsigned NOT NULL,
`SpecialeUnderKategoriID` int(10) unsigned NOT NULL,
`Titel` varchar(255) character set latin1 collate latin1_danish_ci NOT NULL,
`TeaserTekst` varchar(255) character set latin1 collate latin1_danish_ci default NULL,
`DatoOprettet` datetime NOT NULL,
`DatoAendret` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`Slettet` bit(1) default NULL,
PRIMARY KEY  (`id`),
KEY `BrugerID` (`BrugerID`),
KEY `SpecialeKategoriID` (`SpecialeKategoriID`),
KEY `SpecialeUnderKategoriID` (`SpecialeUnderKategoriID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

Og det jeg gerne ville er join SpecialeKategoriID med KategoriNavn, så man kan se kategori navnet. Fordi SpecialeKategoriID ligger i den tabel hvor man poster alt i.
Avatar billede kjulius Novice
24. juni 2008 - 21:39 #1
Det burde vel også kunne gøres, hvis jeg ellers læser feltnavnene rigtigt. F.eks.

SELECT s.*, sk.KategoriNavn
FROM specialer s
INNER JOIN specialekategorier sk ON s.SpecialeKategoriID=sk.id
Avatar billede astrocomdk Nybegynder
25. juni 2008 - 13:36 #2
Så skal jeg skrive dette

SELECT specialer.*, specialekategorier.KategoriNavn
FROM specialer specialekategorier
INNER JOIN specialekategorier ON specialer.SpecialeKategoriID=specialekategorier.id

Men hvis jeg gjor dette kommer der en fejl 1066 Not unique table/alias: 'specialekategorier'
Avatar billede astrocomdk Nybegynder
25. juni 2008 - 19:43 #3
Jeg har glemt at skrive at jeg skal bruge resulatet på en hjemmeside, så jeg skal bruge sk.KategoriNavn til at vise KategoriNavnet på hver enkle post. Dvs. at jeg bruger s.id til at hente indholdet og jeg skal bruge SpecialeKategoriID som referece til specialekategorier tabelen. På hjemmesiden vil jeg kunne vise KategoriNavnet.

I s.SpecialeKategoriID ligger det samme ID som i sk.id
Avatar billede kjulius Novice
26. juni 2008 - 15:50 #4
Ref 25/06-2008 13:36:09

Ved at skrive

FROM specialer specialekategorier

omdøber du tabellen specialer til specialekategorier (svarer til FROM specialer AS specialekategorier)

Derfor "clasher" den med den efterfølgende delsætning INNER JOIN specialekategorier, hvilket giver dig den nævnte fejl.

Ref 25/06-2008 19:43:03

Det var også sådan jeg læste det. Min oprindelige sætning ville give dig netop det. Hvad var grunden til, at du ikke kunne bruge den?

Jeg havde givet tabellen specialer et alias på s (midlertidigt omdøbt tabellen til s) og tabellen specialekategorier havde jeg givet et alias på sk. Grunden skal alene søges i, at jeg er doven og ikke gider referere til feltnavnene med de lange tabelnavne.
Avatar billede astrocomdk Nybegynder
26. juni 2008 - 17:01 #5
Jeg fik den til at virke, det var bare mig som ikke kunne tænke.

Men nu har jeg så det problem at den ikke viser den rigtig kategori på hjemmesiden, den bliver bare ståen som DIVERSE uanset hvlike post jeg tar.

Til at lave hjemmesiden bruger jeg Dreamweaver og her har jeg lavet en recordset
Avatar billede astrocomdk Nybegynder
28. juni 2008 - 17:23 #6
Nu fik jeg den til at virke.

Hele PHP koden ser sådanne ud:

$colname_Recordset1 = "-1";
if (isset($_GET['id'])) {
  $colname_Recordset1 = $_GET['id'];
}
mysql_select_db($database_vidensdatabase, $vidensdatabase);
$query_Recordset1 = sprintf("SELECT s.*, sk.KategoriNavn FROM specialer s INNER JOIN specialekategorier sk ON s.SpecialeKategoriID=sk.id WHERE s.id = %s", GetSQLValueString($colname_Recordset1, "int"));
$Recordset1 = mysql_query($query_Recordset1, $vidensdatabase) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
Avatar billede kjulius Novice
28. juni 2008 - 17:41 #7
Godt du fik det til at virke, men jeg kan nu ikke lade være med at være lidt skuffet over, at du tager alle point selv, når jeg kan se, at det er min sql-kode du bruger i den endelige kode. Ikke at jeg savner dine point, det er mere princippet i det.
Avatar billede astrocomdk Nybegynder
29. juni 2008 - 14:18 #8
Det må du også undskylde. Det var en fejl fra min side. Jeg vil godt give dig point for din kode.

Jeg kan lave et nyt spørgsmål med samme indhold hvor du så laver et svar.
Avatar billede kjulius Novice
30. juni 2008 - 11:28 #9
Nej, nej, det er ikke nødvendigt. :-) Som sagt var det mere princippet, og når du har enkendt fejlen, er der ingen grund til at forfølge sagen yderligere.
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
Computerworld tilbyder specialiserede kurser i database-management

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