Avatar billede hewa Nybegynder
25. februar 2007 - 13:45 Der er 24 kommentarer og
1 løsning

Søgefunktion i flere tabeller og med forskellige felter

Efter inspiration fra et andet indlæg vil jeg også gerne lave en søge funktion, men den driller, da urlen skal være forskellig, alt efter hvilken tabel, der søges i - hvordan pokker gør jeg det??


<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {

$sog_ord = $_POST['soegefelt'];
$query = mysql_query ("SELECT * FROM lovestories, kategori WHERE lovestories.overskrift LIKE '%$sog_ord%' OR lovestories.historie LIKE '%$sog_ord%' OR lovestories.alias LIKE '%$sog_ord%' OR kategori.overskrift LIKE '%$sog_ord%' OR kategori.indhold LIKE '%$sog_ord%'") or die(mysql_error());


echo "<form action='' method='post'>
<input name='soegefelt' type='text' size='50'> <input type='submit' value='Søg'>
</form>";

  while($row = mysql_fetch_assoc($query)) {

if tabel=lovestory -> en url
if tabel=kategorier -> en anden url

  }
}
?>

Spørg endelig, hvis du er i tvivl om, hvad jeg mener!
Avatar billede jakobdo Ekspert
25. februar 2007 - 15:14 #1
Virker din SQL som skrevet herover?

Hvad er det du prøver at lave med:

if tabel=lovestory -> en url
if tabel=kategorier -> en anden url
Avatar billede hewa Nybegynder
25. februar 2007 - 17:14 #2
I min database har jeg flere forskellige tabeller, og rækkerne hedder noget forskelligt. Samtidig er det nogle forskellige url'er, der skal kaldes, alt efter hvilken tabel søgningen finder indhold i.

Hvis jeg bare søger i én tabel, kan jeg nemt få vist mit søge resultat og få url'en til at passe, men med ovenstående har jeg prøvet at søge i to tabeller, men alt efter hvilken tabel, der bliver fundet indhold i, skal url'en være forskellig - og det er det, jeg har prøvet alt illustrere med de to if-sætninger.

Forstår du, hvad jeg mener?
Avatar billede jakobdo Ekspert
25. februar 2007 - 17:26 #3
Jeg tror jeg forstår hvad jeg mener ja!
Men hvis du får forskellige output, alt efter hvilken tabel du får output fra, så kan du jo teste om det er det ene eller andet, og så rette URL derefter?
Avatar billede hewa Nybegynder
25. februar 2007 - 17:42 #4
Ja, og det var det, jeg gerne ville have hjælp til :)
Jeg har prøvet alverdens forskellige kombinationer, men intet af det har virket.

Dog er jeg også i tvivl om, om min forespørgsel til databasen er rigtig, kan du vurdere det? Lige nu er det jo kun to tabeller, men det vil ende ud med 7-8 tabeller.
Avatar billede jakobdo Ekspert
25. februar 2007 - 17:48 #5
HVorfor så mange tabeller?
Kan du ikke samle  flere data i en tabel og så angive kategori som et ID i den tabel?
Avatar billede hewa Nybegynder
25. februar 2007 - 18:00 #6
Alle mine data bliver opsamlet i flere tabeller, da indholdet er forskelligt.

Sådan kan url'en se ud, ved de to eksempler:
Kategorier - http://www.domæne.dk/index.php?cat_id=6
lovestory - http://www.domæne.dk/lovestories.php?mode=lovestory&lovestory_id=17

Og som du kan se, har alting sit eget id, men url'en er meget forskellig - og på en eller anden måde skal jeg have udskidt, at kommer indholdet fra den tabel, skal url'en se sådan ud, og kommer det fra den tabel, skal den se sådan ud.
Avatar billede jakobdo Ekspert
25. februar 2007 - 18:06 #7
Kan du ikke prøve at vise hvordan dit output fra din SQL f.eks. ser ud?
Avatar billede hewa Nybegynder
25. februar 2007 - 18:11 #8
Her må du lige hjælpe mig - jeg forstår ikke, hvad du mener?
Avatar billede jakobdo Ekspert
25. februar 2007 - 18:45 #9
Har du adgang til phpmyadmin?
Avatar billede hewa Nybegynder
25. februar 2007 - 18:48 #10
Ja det har jeg
Avatar billede jakobdo Ekspert
25. februar 2007 - 20:02 #11
Så prøv at lav en SQL forespørgsel
SELECT * FROM lovestories, kategori WHERE lovestories.overskrift LIKE '%$sog_ord%' OR lovestories.historie LIKE '%$sog_ord%' OR lovestories.alias LIKE '%$sog_ord%' OR kategori.overskrift LIKE '%$sog_ord%' OR kategori.indhold LIKE '%$sog_ord%'

Husk at ret sog_ord til et eller andet.
Så smid hvad du får af output her.
Avatar billede hewa Nybegynder
25. februar 2007 - 22:31 #12
Jeg er ikke klar over, hvordan den foresprgsel, jeg laver, hvordan jeg kan få den ud, så du kan se den her?
- men jeg kan da se, at svaret på forespørgelsen er helt galt... så det vil vel sige, at måden jeg har sat min forespørgelse op på, er forkert?
Avatar billede hewa Nybegynder
25. februar 2007 - 22:42 #13
Jeg ser lige, det er to poster i databasen, der indeholder det, jeg spørger efter - og det bliver så fundet to gange - gange syv og igen gange to. Forstået på den måde, at de to forespørgelser bliver fundet to gange i lovestories og så bliver de listet seks gange mere - og det bliver så doblet endnu en gang i kategorier, hvor ordet slet ikke findes... ja, det er da noget, der er helt galt her :)
Avatar billede jakobdo Ekspert
26. februar 2007 - 08:02 #14
Prøv at brug: SELECT DISTINCT
Avatar billede hewa Nybegynder
27. februar 2007 - 23:37 #15
HJÆÆÆÆÆÆLP hvad pokker sker der her....

Efter den sidste gang, hvor vi lavede den der sql forespørgsel, kan jeg ikke få noget til at virke overhovedet... hvad pokker sker der??

Her er min kode og jeg tjekket, tjekket og tjekket og der er ikke noget, der vil :(

<?

if(isset($_POST['soegefelt'])) {


$sog_ord = $_POST['soegefelt'];
$query = mysql_query ("SELECT * FROM lovestories, kategori WHERE lovestories.overskrift LIKE '%$sog_ord%' OR lovestories.historie LIKE '%$sog_ord%' OR lovestories.alias LIKE '%$sog_ord%' OR kategori.overskrift LIKE '%$sog_ord%' OR kategori.indhold LIKE '%$sog_ord%'") or die(mysql_error());


echo "<form action='' method='post'><input name='soegefelt' type='text' size='50'><input type='submit' value='Søg'></form>";

  while($row = mysql_fetch_assoc($query)) {

echo "<a href='".$row['lovestory_id']."'>".$row['overskrift']."</a><br>";

  }
}
?>
Avatar billede jakobdo Ekspert
28. februar 2007 - 08:15 #16
Du skal huske at forbinde til databasen, gør du det højere i din kode?
Avatar billede hewa Nybegynder
28. februar 2007 - 17:09 #17
Det her er altså hul i hovedet... jeg har lige byttet rundt og rundt på linjerne, og nu dur det - det 'sjove' er bare, at det nu virker og koden er den samme som før - jeg fatter INTET...!
Nå, men jeg er klar til kampen igen :)
Avatar billede hewa Nybegynder
28. februar 2007 - 17:14 #18
Nu hører alting op!
Det har lige virket, så gik jeg væk fra siden og tilbage - nu virker det ikke igen - og jeg har vel og mærket ikke ændret noget som helt i koden... hvad f***** sker der..
Avatar billede hewa Nybegynder
28. februar 2007 - 17:58 #19
Okay, det er bare mig, der stadig er en amatør... jeg er heller ikke så gammel i det endnu.

Hvis søgefeltet ligger i forespørgelsen, kommer det ikke frem, men er der en forespørgsel i gang, kan det ses. Da jeg så rettede tingene til, var jeg igang med en forespørgsel, og dermed kunne jeg se det den anden dag og i dag, men når jeg så kommer ind på siden, kan det ikke se længere... jeg håber, du forstår, hvad jeg mener.

Mht. SELECT DISTINCT giver det ikke noget, er der noget i en celle vælter det ud med svar fra alle celler :(

Andre ideer?
Avatar billede jakobdo Ekspert
28. februar 2007 - 19:01 #20
Jeg har desværre lidt svært ved at overskue det hele, så ikke rigtigt.
Avatar billede hewa Nybegynder
28. februar 2007 - 20:48 #21
Kan vi give det en sidste chance?

Jeg har prøvet at lave min forespørgsel om, så den nu ser sådan ud:
$query = mysql_query ("SELECT * FROM lovestories WHERE overskrift LIKE '%$sog_ord%' OR historie LIKE '%$sog_ord%' OR alias LIKE '%$sog_ord%'") AND ("SELECT * FROM kategori WHERE overskrift LIKE '%$sog_ord%' OR indhold LIKE '%$sog_ord%'") or die(mysql_error());

Tilsyneladende virker det, men jeg får kun resultater frem, der kommer fra tabellen lovestories. Har du en ide til, hvordan jeg kan vise de resultater, der kommer fra kategorier?
Avatar billede jakobdo Ekspert
28. februar 2007 - 21:01 #22
Skal din søgning komme fra begge tabeller samtidig?
Eller hvad med at lave en dropdown, hvor brugeren kan vælge hvilken tabel der skal søges  i?

Ellers er det rigtigt som du gør, hvor du vælger FROM tabel1, tabel2, tabel3 osv...
Avatar billede hewa Nybegynder
28. februar 2007 - 22:22 #23
Ja, jeg vil gerne, man kan søge i alle tabeller samtidig (dog ikke i alle celler i hver tabel), men når jeg laver den aller øverste kode i denne tråd, går det jo i fisk.

Men ved du så, hvordan jeg tilpasser koden, så den virker?

Denne virker jo desværre ikke:
$query = mysql_query ("SELECT * FROM lovestories, kategori WHERE lovestories.overskrift LIKE '%$sog_ord%' OR lovestories.historie LIKE '%$sog_ord%' OR lovestories.alias LIKE '%$sog_ord%' OR kategori.overskrift LIKE '%$sog_ord%' OR kategori.indhold LIKE '%$sog_ord%'") or die(mysql_error());
Avatar billede jakobdo Ekspert
01. marts 2007 - 07:39 #24
Jeg må tilstå jeg ikke er super i sql.
Men måske du kan få bedre hjælp med dit spørgsmål, hvis du prøver i: eksperten -> database -> mysql
Avatar billede hewa Nybegynder
01. marts 2007 - 08:32 #25
Okay, det prøver jeg, tak fordi du forsøgte at hjælpe!
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