Avatar billede zac Nybegynder
22. februar 2003 - 19:00 Der er 3 kommentarer og
3 løsninger

Søgning i flere tabellers bestemte felter

En simpel søgning kunne gå på:
$result = mysql_query("SELECT hold_navn FROM hold WHERE
hold_navn LIKE '%$find%'");

Men hvordan søger jeg i flere tabeller (t1, t2, t5,t6) og helst kun i nogle af deres felter...

Hvis jeg accepterer søgning i alle felterne i flere tabeller:
$result = mysql_query("SELECT * FROM hold,elever, tilmeldinger [[men hvad så med det næste]] WHERE
[[ja, hvad]] LIKE '%$find%'");

Og hvad, hvis ikke alle felterne skal med?
Avatar billede ztyxx Nybegynder
22. februar 2003 - 23:29 #1
du skal have fat i JOIN, du kan læse mere i manualen på www.mysql.com
Avatar billede roo104 Nybegynder
23. februar 2003 - 12:31 #2
SELECT tabel1.kolonne, tabel2.kolonne FROM tabel1, tabel2 where tabel1.kolonne = tabel2.kolonne AND tabel1.kolonne LIKE '%etellerandet';

Et eksempel på postnummer - by relation:
select klient.fornavn, klient.postnummer, postnummer.bynavn from klient, postnummer where klient.postnummer = postnummer.postnummer and klient.klientnummer = 10001;

Den vælger så fx Jonas, 2750, Ballerup selvom ballerup ikke findes i klient tabellen.

En go ide er at give dem alias fx.
select klient.fornavn AS fornavn, klient.postnummer AS postnummer, postnummer.bynavn AS bynavn from klient, postnummer where klient.postnummer = postnummer.postnummer and klient.klientnummer = 10001;

Der er mere hjælp at finde her:
http://www.mysql.com/doc/en/JOIN.html
Avatar billede zac Nybegynder
23. februar 2003 - 22:20 #3
Jeg kan godt se, hvor I vil hen, og har købt en MySQL-bog - og det kan godt være, jeg misforstår en hel del, men:
Når I - og bogen - taler om joins, gælder det om at få informationer ud af flere tabeller ved at se, om de har fælles værdier (og det kan de kun have når de har fælles felter).
Det har jeg også brug for, men det er ikke nok.
Det websted, hvor jeg vil lave søgningen, har tabeller med bl.a. afdelinger, skoler, lærere, elever, hold, tilmeldinger, nyheder. Der er enkelte felter, som går igen, det er jo det, der får systemet til at hænge sammen (fx: holdet har en lærer, og de to ting hænger sammen via fælles felt).
Men en søgning på en elev skal primært finde ham (og dernæst også hans tilmeldinger), der skal findes en lærer, et eller flere hold m. bestemte egenskaber, osv.
Hvis ikke søgefeltet skal gentages for hver ting, man vil søge i, hvordan da få valgt alle relevante tabeller og deres relevante feltnavne OG få søgt, så LIKE '%$find%' får fat i dem alle sammen? Er det ikke noget andet end join? hm...
Avatar billede roo104 Nybegynder
23. februar 2003 - 22:32 #4
Dine tabeller hænger sammen via constraints som du nok har oprettet. For at finde data igennem, og fra flere tabeller bruger man join's. Det er den eneste måde jeg kender. Det du nok tænker på er sub-selectioner, hvor man siger:
select lærer from tabellærer where lærer = (select elevnavn from tabelelever where elevnavn like '%jens%');
Jeg ved godt det ikke giver mening det jeg skrev men det var bare for at give dig indtryk af det.

Hvis du vil hente data fra mere end 1 tabel er den nemmeste måde nok at bruge joins.

Jeg går ud fra at du benytter constraints, da det fx ikke skal være muligt at slætte en lærer, hvis han allerede har et hold knyttet til sig, uden at holdet først får en anden lærer eller bliver slettet. Så hvis du har disse constraints  er det menet nemt at bruge join
Avatar billede coladrenge Nybegynder
20. marts 2003 - 18:42 #5
Jeg har skrevet en forespørgsel generator til MySQL som kan de ting som du efterlyster, hvis du er interesseret kan du få programmet tilsendt. Programmet gør det muligt at designe dine SQL-sætninger visuelt.
Avatar billede zac Nybegynder
20. oktober 2005 - 23:44 #6
undskyld sene svar!
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