Gå til innhold

Hjelp til spørring med 2 tabeller


Anbefalte innlegg

Hei,

Jeg har to tabeller:

 

forum_topics som har topic_id og topic_dato og topic_sticky,

og forum_svar som har svar_topic og svar_dato

 

 

Det jeg ønsker er å hente ut alle topicene, sortert etter:

1. topic_sticky DESC (alle med samme topic_sticky verdi skal sorteres etter topic_id)

2. svar_dato eller topic_dato

 

 

Altså alle sticky topics først hvor disse er sortert etter topic_id, og videre skal alle sorteres etter topic_dato, men hvis topicen har et innlegg eller flere skal datoen til det siste innlegget brukes istedet til sorteringen.

 

 

Noen som klarer å få til dette med en spørring? eller må jeg ty til flere spørringer?

 

 

kjører btw mysql

 

 

forum_topics

CREATE TABLE `forum_topics` (
 `topic_id` int(11) NOT NULL auto_increment,
 `topic_subkategori` int(11) NOT NULL,
 `topic_forfatter` int(11) NOT NULL,
 `topic_overskrift` varchar(255) NOT NULL,
 `topic_tekst` longtext NOT NULL,
 `topic_dato` datetime NOT NULL,
 `topic_endret` datetime NOT NULL,
 `topic_stengt` int(11) NOT NULL,
 `topic_sticky` int(11) NOT NULL,
 `topic_slettet` int(11) NOT NULL,
 PRIMARY KEY  (`topic_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

 

forum_svar

CREATE TABLE `forum_svar` (
 `svar_id` int(11) NOT NULL auto_increment,
 `svar_topic` int(11) NOT NULL,
 `svar_forfatter` int(11) NOT NULL,
 `svar_overskrift` varchar(255) NOT NULL,
 `svar_tekst` longtext NOT NULL,
 `svar_dato` datetime NOT NULL,
 `svar_endret` datetime NOT NULL,
 `svar_slettet` int(11) NOT NULL,
 PRIMARY KEY  (`svar_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Endret av WaBBiT
Lenke til kommentar
Videoannonse
Annonse
Hei,

Jeg har to tabeller:

 

forum_topics som har topic_id og topic_dato og topic_sticky,

og forum_svar som har svar_topic og svar_dato

 

Det jeg ønsker er å hente ut alle topicene, sortert etter:

1. topic_sticky DESC (alle med samme topic_sticky verdi skal sorteres etter topic_id)

2. svar_dato eller topic_dato

 

Altså alle sticky topics først hvor disse er sortert etter topic_id, og videre skal alle sorteres etter topic_dato, men hvis topicen har et innlegg eller flere skal datoen til det siste innlegget brukes istedet til sorteringen.

 

Noen som klarer å få til dette med en spørring? eller må jeg ty til flere spørringer?

 

kjører btw mysql

6579270[/snapback]

Vel, de to tingene du trenger å se på er operatoren UNION som slår sammen to resultatsett, samt ORDER BY som du trenger for å sortere hvert av resultatsettene dine. Ellers vil jeg få anbefale SQL Programming Style av Joe Celko, samt Database Design av Stephens/Plew. Den første boken omhandler blant annet god navnegivning av tableller, kolonner med mer, den andre databasedesing, mao struktur på tabellene. Jeg kan ikke se at den splittingen du foretar i to tabeller er hensiktsmessig.

 

Til slutt, det er veldig fint om legger med kode for generering av de aktuelle tabeller når du poster, for det gjør det mye lettere for andre å se hva du faktisk har gjort, og det gjør det mulig evt å lage en fiks ferdig løsning på de problemene du måtte støte på.

Endret av roac
Lenke til kommentar

tusen takk for informativt svar, men du mener ikke oppdelingen er hensiktsmessig?

 

Hva legger du bak dette? Kunne du gått litt nærmere inn på hva du mener, og eventuelle forslag til forbedringer?

 

Takk på forhånd!

 

 

EDIT: har lagt til tabell info i første post!

Endret av WaBBiT
Lenke til kommentar
Hva legger du bak dette? Kunne du gått litt nærmere inn på hva du mener, og eventuelle forslag til forbedringer.

6579517[/snapback]

En trådstart og et svar er begge deler en post i et slikt system, og av har av natur tilsvarende egenskaper, og bør således ligge i en egen tabell. Det du evt kan gjøre er å lage en egen tabell for tråder, evt med en kobling til den frøste posten for å kunne begynne å lage treet. Videre bør postene ha en kobling til den posten de eventuelt er et svar på.

 

Når det gjelder navngivning så er det ingen grunn til å inkludere tabellnavn eller tilsvarende på kolonenne. Det finnes selvfølgelig unntak, men de oppdager du fint selv når du evt får behov for det. Mao, i steden for

 

CREATE TABLE test (
 test_id int,
 test_name varchar(20),
 test_start datetime,
 test_finish datetime
);

 

Vil jeg heller anbefale

 

CREATE TABLE test (
 id int,
 name varchar(20),
 start datetime,
 finish datetime
);

Lenke til kommentar

Hørtes smart ut, jeg så bare at phpbb hadde en egen tabell til trådstart og alle svar deretter og tenkte at det var det lureste, men det er kanskje enklere å bruke bare en tabell til det :)

 

bare ha et felt i post tabellen med f.eks svartil også er den tom er det en trådstart, og hente ut et tre nedover, men jeg ser for meg at det vil være mye større belastning på server å gjøre det på den måten, i forhold til phpbb måten..

eller?

Lenke til kommentar
Hørtes smart ut, jeg så bare at phpbb hadde en egen tabell til trådstart og alle svar deretter og tenkte at det var det lureste, men det er kanskje enklere å bruke bare en tabell til det :)

 

bare ha et felt i post tabellen med f.eks svartil også er den tom er det en trådstart, og hente ut et tre nedover, men jeg ser for meg at det vil være mye større belastning på server å gjøre det på den måten, i forhold til phpbb måten..

eller?

6580305[/snapback]

Nei, det vil bare være en tung operasjon vis databasen er dårlig indeksert. En spørring på formen

 

SELECT kolonner FROM tabell WHERE kolonnne IS NULL

 

skal være kjapp, hvis ikke er jeg fristende til å si at det er noe galt med oppsettet/tuningen av databaseserveren.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...