Avatar billede dennism Nybegynder
30. december 2004 - 21:44 Der er 24 kommentarer og
2 løsninger

MySQL - hvordan gøres dette?

Jeg har et lidt vanskeligt problem, vil jeg mene.
Kan i hvert fald ik selv løse det.

(dette eks. er forenklet, men det burde være nok at vide)

Jeg trækker alle "id" ud fra alle rækkerne i min tabel forums:

$mysql = mysql_query("SELECT id FROM forums");
$row = mysql_fetch_array($mysql)

Efterfølgende er det meningen at jeg vil finde alle rækker i tabelen "forums_threads" hvor "forum_id" er "$row[id]".
Hvis der kun er en række i tabellen forums, vil det ku gøre på denne måde:
$mysql = mysql_query("SELECT titel FROM forums_threads WHERE forum_id = '$row[id]'");

Men hvad gør jeg der er flere rækker i tabellen?
Avatar billede ahv Nybegynder
30. december 2004 - 21:47 #1
Det du der har gjort er det helt rigtige, efter følgende gøre du en helt normal while løkke hvor du trækker dem ud.
Avatar billede dennism Nybegynder
30. december 2004 - 21:49 #2
ahv >>

Jeg, dette kan ik helt løse mit problem. Nu skal jeg forsøge at forklare hvorfor:

$mysql = mysql_query("SELECT titel FROM forums_threads WHERE forum_id = '$row[id]' LIMIT 0,5");

Denne skal bruges til at printe de 5 nyeste tråde i mit forum (de 5 nyeste rækker i databasen forums_threads). Men det er ikke alle rækkerne den skal søge blandt, men blot dem som har de $row[id]-værdier som blev fundet i overstående foresp.!

Forstår du?
Avatar billede dennism Nybegynder
30. december 2004 - 21:49 #3
Jeg, dette kan ikke helt løse mit problem =
Nej, dette kan ikke helt løse mit problem
Avatar billede detox Nybegynder
30. december 2004 - 21:49 #4
Jeg vil foretrække at lave det i den her stil:

SELECT a.id FROM forums_threads a, forums b where a.id = b.id
Avatar billede detox Nybegynder
30. december 2004 - 21:51 #5
SELECT a.id FROM forums_threads a, forums b where a.id = b.id ORDER BY a.id DESC LIMIT 0,5
Avatar billede dennism Nybegynder
30. december 2004 - 21:52 #6
detox >>

Kan det gøre så enkelt? Uden at skulle lave to kald til databasen?
Avatar billede ahv Nybegynder
30. december 2004 - 21:53 #7
ah på den måde, troede du kun havde en id værdi, prøv at kombinere dit med detox:

SELECT forums_threads.id, forums.title FROM forums_threads, forums WHERE forums_threads.id = forums.forum_id LIMIT 5
Avatar billede detox Nybegynder
30. december 2004 - 21:53 #8
Det vil jeg mene, du må jo teste ;o)
Avatar billede ahv Nybegynder
30. december 2004 - 21:54 #9
Også skal det være de 5 nyeste så skal du som detox har også have en order by etellerandet desc på.
Avatar billede dennism Nybegynder
30. december 2004 - 21:56 #10
Ja, selvfølgelig! Tester lige!
Avatar billede ahv Nybegynder
30. december 2004 - 21:56 #11
Argh skal være:

SELECT forums.id, forums_threads.title FROM forums_threads, forums WHERE forums.id = forums_threads.forum_id ORDER BY forums_threads.forum_id DESC LIMIT 5
Avatar billede detox Nybegynder
30. december 2004 - 21:58 #12
Måske:

SELECT b.titel FROM forums_threads a, forums b where a.id = b.id ORDER BY a.id DESC LIMIT 0,5
Avatar billede detox Nybegynder
30. december 2004 - 21:59 #13
Sludder:

SELECT a.titel FROM forums_threads a, forums b where a.id = b.id ORDER BY a.id DESC LIMIT 0,5
Avatar billede dennism Nybegynder
30. december 2004 - 22:02 #14
Jeg bruger nu:

SELECT forums.id, forums_threads.title FROM forums_threads, forums WHERE forums.id = forums_threads.forum_id ORDER BY forums_threads.time DESC LIMIT 5

Det giver denne fejl:
mysql_num_rows(): supplied argument is not a valid MySQL result resource

Kan I se fejlen?
Avatar billede detox Nybegynder
30. december 2004 - 22:03 #15
Hmm, det skal selvfølgelig være a.forum_id. Tror ahv's sidste virker.
Avatar billede detox Nybegynder
30. december 2004 - 22:03 #16
Måske:

forums_threads.title <> forums_threads.titel
Avatar billede detox Nybegynder
30. december 2004 - 22:06 #17
SELECT b.id, a.titel FROM forums_threads a, forums b where a.forum_id = b.id ORDER BY a.forum_id DESC LIMIT 0,5
Avatar billede dennism Nybegynder
30. december 2004 - 22:07 #18
Har selv fundet fejlen
Avatar billede detox Nybegynder
30. december 2004 - 22:09 #19
dennism -> og det var?
Avatar billede dennism Nybegynder
30. december 2004 - 22:09 #20
Detox >>

Smider du også lige et svar?

Har fået det til at virke nu..
Tusind tak for hjælpen i to!
Avatar billede dennism Nybegynder
30. december 2004 - 22:09 #21
Som du skrev, pga. title => titel.. Men opdagede det inden jeg fik opdateret min browse :)
Avatar billede detox Nybegynder
30. december 2004 - 22:10 #22
Velbekommen ;o)
Avatar billede dennism Nybegynder
30. december 2004 - 22:17 #23
Hvorfor bliver forums_threads.id til $row[id] og ikke $row[forums_threads.id]?
Avatar billede ahv Nybegynder
30. december 2004 - 22:18 #24
Fordi den blot henter dem ud med deres normale navne.
Avatar billede dennism Nybegynder
30. december 2004 - 22:30 #25
Hvad så når jeg både har en forums.id og en forums_threads.id!?
Avatar billede detox Nybegynder
30. december 2004 - 22:40 #26
Så kan du fx lave et alias til dem:

SELECT a.id t1_id, b.id t2_id FROM tabel1 a, tabel2 b

så ligger de i $row['t1_id'] og $row['t2_id'].

Eller du kunne vælge at referere til dem som $row[0] og $row[1].
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