Avatar billede claus_larsen Nybegynder
04. september 2003 - 12:57 Der er 19 kommentarer og
1 løsning

Flere Svære Queries

Jeg har et forum

Forummet er indelt som følger

1. HovedEmner
2. Tråde i emnerne
3. Indlæg i trådene

Det jeg gerne vil er at udvælge det nyeste indlæg inden for hvert Hovedemne!

Tabelerne ser ud som følger:

CREATE TABLE ForumEmner (
  EmneID int(5) NOT NULL auto_increment,
  EmneNavn varchar(250) NOT NULL default '',
  EmneBeskrivelse text NOT NULL,
  Billede varchar(250) NOT NULL default '',
  Flag int(2) NOT NULL default '0',
  PRIMARY KEY  (EmneID)
) TYPE=MyISAM COMMENT='HovedEmner i forummet';




CREATE TABLE ForumTråde (
  TrådID int(9) NOT NULL auto_increment,
  EmneID int(9) NOT NULL default '0',
  Overskrift varchar(250) NOT NULL default '',
  Indhold text NOT NULL,
  Skribent varchar(250) NOT NULL default '',
  Medlem int(1) NOT NULL default '0',
  DateTime datetime NOT NULL default '0000-00-00 00:00:00',
  IP varchar(250) NOT NULL default '',
  PRIMARY KEY  (TrådID)
) TYPE=MyISAM COMMENT='Tråde i forummet';

   



CREATE TABLE ForumIndlæg (
  IndlægID int(9) NOT NULL auto_increment,
  TrådID int(9) NOT NULL default '0',
  Overskrift varchar(250) NOT NULL default '',
  Indhold text NOT NULL,
  Skribent varchar(250) NOT NULL default '',
  Medlem int(1) NOT NULL default '0',
  DateTime datetime NOT NULL default '0000-00-00 00:00:00',
  IP varchar(250) NOT NULL default '',
  PRIMARY KEY  (IndlægID)
) TYPE=MyISAM COMMENT='Forum Indlæg';
Avatar billede roo104 Nybegynder
04. september 2003 - 13:25 #1
select in.* from ForumIndlæg in, ForumTråde tr, ForumEmner em where em.EmneID = tr.TrådID and tr.TrådID = IndlægID order by in.DateTime desc limit 1,3;

det skulle meget gerne vise de 3 nyeste indlæg i hver emne
Avatar billede roo104 Nybegynder
04. september 2003 - 13:27 #2
eller vist du vil se det lidt mere overskueligt
select em.EmneNavn, tr.Overskrift, in.* from ForumIndlæg in, ForumTråde tr, ForumEmner em where em.EmneID = tr.TrådID and tr.TrådID = IndlægID order by in.DateTime desc limit 1,3;
Avatar billede claus_larsen Nybegynder
04. september 2003 - 13:28 #3
Jeg skal bare bruge det sidste, så er det limit 1,1 ikke sandt?

Hvorfor er det ikke limit 0,1?

Vil være super hvis du kort kunne forklare hvordan det virker
Avatar billede claus_larsen Nybegynder
04. september 2003 - 13:33 #4
Hmm virker ikke!

Den returnerer således

http://www.sleepwalkers.dk/Forum.php
Avatar billede claus_larsen Nybegynder
04. september 2003 - 13:34 #5
Højre side
Avatar billede claus_larsen Nybegynder
04. september 2003 - 13:35 #6
Skal der ikke en WHERE på et sted?
Avatar billede claus_larsen Nybegynder
04. september 2003 - 13:36 #7
Nej det er der jo...

Kan dog ikke få det til at virke!
Avatar billede roo104 Nybegynder
04. september 2003 - 13:39 #8
prøv den her så kan jeg forklare hvis det virker

select em.EmneNavn, tr.Overskrift, in.* from ForumIndlæg in, ForumTråde tr, ForumEmner em where em.EmneID = tr.TrådID and tr.TrådID = in.IndlægID order by in.DateTime desc limit 1,1;
Avatar billede claus_larsen Nybegynder
04. september 2003 - 13:41 #9
Emnerne er listet i databasen og bliver hevet frem:

$EmneQuery = mysql_query("SELECT * FROM ForumEmner WHERE Flag = '0' ORDER BY EmneID ASC");   

while($EmneRow = mysql_fetch_array($EmneQuery))               
{

}       

Så jeg skal have den til at benytte $EmneRow[EmneID] til at udvælge det emne der er i færd med at blive udskrevet!
Avatar billede claus_larsen Nybegynder
04. september 2003 - 13:41 #10
Stadig det samme...
Avatar billede claus_larsen Nybegynder
04. september 2003 - 13:42 #11
em in og tr...

Er det kortere navne for de forskellige tabeler som du har givet dem???
Avatar billede claus_larsen Nybegynder
04. september 2003 - 13:44 #12
Forstår ikke hvorfor du skriver
where em.EmneID = tr.TrådID and tr.TrådID = in.IndlægID

Den holder ikke gør den...

EmneID skal jo være lige EmneID i Tråd-Tabelen, og TrådID skal være lig med TrådID i Indlæg-tabelen!
Avatar billede roo104 Nybegynder
04. september 2003 - 13:49 #13
ja em in og tr er aliaser.

ja sorry min fejl
select in.* from ForumIndlæg in, ForumTråde tr, ForumEmner em where em.EmneID = tr.EmneID and tr.TrådID = in.TrådID order by in.DateTime desc limit 1,1;
Avatar billede roo104 Nybegynder
04. september 2003 - 13:54 #14
med hensyn til limit 1,1 så skal det være 1 i følge mysql da den selv skriver:
Please note that in versions prior to 4.1.0 this does not work with LIMIT 0, which is optimised to return instantly (resulting in a row count of 0)
Avatar billede roo104 Nybegynder
04. september 2003 - 13:55 #15
kan også bare være limit 1
Avatar billede claus_larsen Nybegynder
04. september 2003 - 14:12 #16
Mangler stadig at få med hvilket emne den skal vælge:

Emnerne er listet i databasen og bliver hevet frem:

$EmneQuery = mysql_query("SELECT * FROM ForumEmner WHERE Flag = '0' ORDER BY EmneID ASC");   

while($EmneRow = mysql_fetch_array($EmneQuery))               
{

}       

Så jeg skal have den til at benytte $EmneRow[EmneID] til at udvælge det emne der er i færd med at blive udskrevet!

Den kommer stadig frem således

http://www.sleepwalkers.dk/Forum.php
Avatar billede roo104 Nybegynder
04. september 2003 - 14:17 #17
select in.* from ForumIndlæg in, ForumTråde tr, ForumEmner em where em.EmneID = tr.EmneID and tr.TrådID = in.TrådID and em.EmneID = ($EmneRow[EmneID]) order by in.DateTime desc limit 1,1;

$EmneRow[EmneID] skal lige rettes til så det passer php syntaks
Avatar billede roo104 Nybegynder
04. september 2003 - 14:22 #18
Du kan oså hive det hele ud i et hug, noget i den her stil
select em.EmneID, in.* from ForumIndlæg in, ForumTråde tr, ForumEmner em where em.EmneID = tr.EmneID and tr.TrådID = in.TrådID and em.EmneID = (SELECT * FROM ForumEmner WHERE Flag = '0' ORDER BY EmneID ASC) order by in.DateTime desc limit 1,1;

tror ikke den virker, man bare så du har en ide
Avatar billede claus_larsen Nybegynder
04. september 2003 - 14:39 #19
Ser ikke ud til at virke!
Avatar billede claus_larsen Nybegynder
04. september 2003 - 14:44 #20
Jeg leger lige lidt videre med det, og vender tilbage!
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