Avatar billede Slettet bruger
23. december 2010 - 10:42 Der er 9 kommentarer

Join i samme tabel

Hej, jeg TROR, det handler om at join'e i samme tabel - forhåbentligt kan en ekspert hjælpe mig.

Jeg har en tabel med en række kategorier, se screendump af database her: http://img156.imageshack.us/img156/5615/kategorier.png

Jeg viser rækken af kategorier i min select via:

<option value="<?php echo $row['id']; ?>"><?php echo $row['name']; ?></option>

Dvs. jeg får flg.: (her sorteret alfabetisk):
1.semester
3.semester
5.semester
Underkategori_1_i_1.semester
Underkategori_1_i_3.semester
Underkategori_1.1_i_3.semester

Jeg vil gerne have den til at vise stien (relationen ml. kategori og underkategori (se "parent" og "path" i databasen på billedet ovenfor), sådan at det fremkommer således i stedet:

1.semester
1.semester/Underkategori_1_i_1.semester
3.semester
3.semester/Underkategori_1_i_3.semester
3.semesterUnderkategori_1_i_3.semester/Underkategori_1.1_i_3.semester
5.semester

osv.

Hvordan kan jeg join'e enten "parent" el. "path" med "id" (se billede af database) til lave denne visning?
Avatar billede wtd_nielsen Nybegynder
23. december 2010 - 11:54 #1
hmm umiddelbart tænker jeg at man bør smide underkategorier i en anden tabel, for at gøre det hele nemmere.
hvis man skulle lave en select som du ønsker, skal man ud i noget med at sige :

select k1.name,k2.name
from kategorier as k1, kategoerer as k2
where k1.id = k2.parent

det er hvad jeg lige umiddelbart tænker...
Avatar billede Slettet bruger
23. december 2010 - 11:59 #2
Hej,

Tak for svar. Jeg har ikke lavet database-strukturen (og den kan ikke ændres :-)) så jeg må prøve mig frem...

Jeg kan ikke helt gennemskue din streng - så du får lige min eksisterende (den er lang, beklager :-)):

$sql="SELECT ".$prefix."course_categories.id, ".$prefix."course_categories.name, ".$prefix."course_categories.parent, ".$prefix."course_categories.path, ".$prefix."course_categories.sortorder FROM ".$prefix."course_categories WHERE ".$prefix."course_categories.visible = '1' ORDER BY ".$prefix."course_categories.name asc";

Kan du gennemskue det ud fra det?
Avatar billede wtd_nielsen Nybegynder
23. december 2010 - 14:52 #3
det bliver et skud:

$sql="SELECT ".$prefix."course_categories.id, k1.name,k2.name k1.parent, k1.path, k1.sortorder FROM ".$prefix."course_categories as k1, $prefix."course_categories as k2 WHERE k1.visible = '1'
and k1.id = k2.parent
ORDER BY k1.name asc";
Avatar billede wtd_nielsen Nybegynder
23. december 2010 - 14:54 #4
$sql="SELECT k1.id, k1.name,k2.name k1.parent, k1.path, k1.sortorder FROM ".$prefix."course_categories as k1, $prefix."course_categories as k2 WHERE k1.visible = '1'
and k1.id = k2.parent
ORDER BY k1.name asc";
Avatar billede Slettet bruger
23. december 2010 - 15:42 #5
Hej igen, forstår vist ikke helt dit k1 og k2 - skal de omdøbes, eller?
Avatar billede coderdk Praktikant
23. december 2010 - 22:50 #6
course_categories as k1
course_categories as k2

k1 er "alias 1" for din tabel, k2 er "alias 2", sådan joines en tabel med sig selv ;)
Avatar billede Slettet bruger
23. december 2010 - 23:05 #7
Aha, er helt grøn med det join... Hvordan vil option-koden, så skulle se ud for at vise det som:

1.semester
1.semester/Underkategori_1_i_1.semester
3.semester
3.semester/Underkategori_1_i_3.semester
3.semesterUnderkategori_1_i_3.semester/Underkategori_1.1_i_3.semester
5.semester

Tak for hjælpen!
Avatar billede Slettet bruger
23. december 2010 - 23:24 #8
Kunne man i stedet lave et array med navne på kategorier og underkategorier? Er det smartere?
Avatar billede Slettet bruger
24. december 2010 - 09:28 #9
Hej igen, måske jeg har spurgt forkert (prøver selv at gennemskue det :-))

Det jeg prøver på - eller tror der skal ske, er at der i mit:

while($row = mysql_fetch_array($result))
{
<option value="<?php echo $row['id']; ?>"><?php echo $row['name']; ?></option>
}

tilføjes endnu et "loop" der oversætter/erstatter id'erne fra "path" med det tilhørende "name", sådan at det vil ligne:

while($row = mysql_fetch_array($result))
{
<option value="<?php echo $row['id']; ?>"><?php echo $PATH_WITH_NAMES; ?><?php echo $row['name']; ?></option>
}

Mange tak for hjælpen! Og glædelig jul! :-)
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