Søgning i flere tabeller?

Tags:    php

Davs derude.
Her kommer et (håber jeg) newbie spørgsmål til jer.
Overskriften siger næsten alt - hvordan fletter jeg resultater fra flere tabeller sammen i én søgning?

Jeg søger nu i tabellen "bornholm" og feltet "sogeord".
Feltets navn er ens for alle tabeller, men hvordan kan jeg søge i 2 tabeller, f.eks. "bornholm" og "nordjylland"?

Min nuværende kode ser således ud:

Fold kodeboks ind/udKode 

Jeg har prøvet at kigge forumet igennem, men uden held.
Håber der er nogen herinde der kan hjælpe!
På forhånd tak :)



Indlæg senest redigeret d. 02.04.2008 22:18 af Bruger #13473
7 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 6 karma
Sorter efter stemmer Sorter efter dato
du kan sætte flere navne i dit FROM kriterie: ...FROM bornholm, fyn WHERE...

du kan joine flere tabeller sammen: ...FROM bornholm LEFT JOIN fyn ON (navn LIKE 'odense') WHERE...

Men at have flere tabeller der dækker hver deres region er ikke særlig smart.

Du skal hellere samle alle regioner i en tabel og steder i en anden tabel også sammenlægge dem, når du laver en søgning.
Derved kan du finde alle steder der er tilknyttet en bestemt region og derved søge på både sted og region.

Med mit forslag kan du skrive en mere smart sql a la:
Fold kodeboks ind/udKode 

Eller
Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 02.04.2008 22:59 af Bruger #10216
jeg ville lave 2 tabeller som gnu siger hvis jeg var dig, men ellers så mener jeg det er unions du skal bruge og ikke joins, og jo flere tabeller du skal bruge desto mere ulæsligt bliver de her queries.
Fold kodeboks ind/udKode 




Hmm den med "FROM bornholm, fyn, nordjylland WHERE...." duer ikke her :(
Jeg prøvede at lege lidt med det andet, men det er umiddelbart ret uoverskueligt for mig, så det ville helt klart være den nemmeste bare at kunne lave en søgning i flere end 1 tabel på én gang..
Hvad ville være upraktisk ved det?



yeah I know hvordan I ville lave det.. :)
Hehe..

Men det med UNION virker heller ikke :(



Så må du ud i de to tabeller. På med vanten og så i gang med at arbejde.

To tabeller, en til regioner og en til steder, hverken mere eller mindre.

Tabellen med steder indeholder så et reference-felt med værdier der matcher auto-id i tabellen med regioner. Det er nævnt før, og nu er det sørme blevet det igen.
Det kaldes en: en-til-mange-relation.

Ellers må du jo bare gentage dit før-nævnte kodestykke på samtlige tabeller og så få php til at lægge resultaterne sammen. Det er noget nams og virkelig skidt kode.



Indlæg senest redigeret d. 03.04.2008 18:19 af Bruger #10216
Okay.. Der er nok ingen vej udenom så.. Hehe :)
Men så skal jeg lige være med her.. Jeg skal bruge et felt som indeholder søgeord, og et felt som indeholder selve den annonce som man skal se.. Disse skal så være delt op i regioner.

Så jeg laver en regioner, som indeholder de forskellige regioner, self., og så en til steder? Som så indeholder hvad? Og hvor placerer jeg søgeord og annoncen?

Beklager min inkompetence, men det er ikk ret skarp i det her :)



søgeord, annonce og et regionsid i en tabel

og

regionsid,regionsnavn i en anden tabel

så kan du, hvis vi kalder den første tabel for annoncer og den anden regioner kan du lave følgende query
$res=mysql_query("SELECT a.*,r.regionsnavn FROM annoncer AS a LEFT JOIN regioner AS r ON(r.regionsid=a.regionsid) WHERE a.soegeord LIKE '%".$sog."%'");

For at søge i specifikke regioner, f.eks. fyn or nordjylland
$res=mysql_query("SELECT a.*,r.regionsnavn FROM annoncer AS a LEFT JOIN regioner AS r ON(r.regionsid=a.regionsid) WHERE a.soegeord LIKE '%".$sog."%' AND (r.regionsnavn='Fyn' OR r.regionsnavn='Nordjylland')");


Forbehold for fejl da jeg ikke har testet det :)



t