Avanceret søgning i mySQL

Tags:    php

<< < 12 > >>
Hej alle!

Jeg er ved at lave en slags søgemaskine som søger i blandt mine brugere. Men jeg har et problem. Man skal foreksempel kunne søge på brugere som har oprettet en tråd i mit forum indenfor eksempelvis 5 dage. Problemet er at for at finde ud af det er jeg nød til at bruge en anden tabel som eksempelvis:

mysql_query("SELECT * FROM forum_posts WHERE postby = '" . userid() . "' && posttime > '1200654188'")

Det betyder at jeg er nød til først at hente alle brugere og så derefter lave en while som tjekker brugerne for om de også "overholder" søgekriteriet med seneste post. Det giver dog en del problemer med hensyn til sideskift osv.

Så mit spørgsmål er; er det muligt at tjekke om brugeren har postet noget i den samme query som:

mysql_query("SELECT * FROM users WHERE blalbla")

???
På forhånd tak



11 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Her har du lidt forskellige eksempler. De er ikke særligt avanceret. Men når man begynder at lægge et par ekstra tabeller til og joiner på forskellige måder, så handler det om at holde tungen lige i munden. :)

Fold kodeboks ind/udKode 


En lille side bemærkning. jeg vil anbefale dig at holde til unix-time. Det er langt nemmere at arbejde med. :)



Indlæg senest redigeret d. 18.01.2008 12:42 af Bruger #10216
Hey,

prøv med dette:
Fold kodeboks ind/udKode 


Har lige ændret lidt, nemlig skiftet 1200654188 ud med en dato og tid, det vil sige istedet for at skrive 1200654188, skal du bare finde datoen og tiden for 5 dage siden, og det man søger efter er i eksemple sat til at være brugernavnet.

Håber det fungerer ellers må du lige skrive :D



Indlæg senest redigeret d. 18.01.2008 12:51 af Bruger #8845
Wow, det er godt nok med at holde tungen lige i munde :P Kan en af jer lave et eksempel på den her case:

Jeg søger på en bruger som hedder noget med 'Jenz3n', altså "name LIKE '%Jenz3n%'" samtidig skal denne person have lavet 5 posts i forummet, altså "SELECT count(*) FROM posts WHERE postby = 'idnummer'".



det skulle nok være noget i denne stil
Fold kodeboks ind/udKode 




jeg har nu omsider fået lavet den så den passer og MANGE TAK, Gnu, hvis du lige laver et svar?

En sidste ting. På hver side har jeg 20 rækker. Det betyder at jeg laver en LIMIT 20 på min query, det virker fint. Men findes der en kommando til at se hvormange querys den VILLE have fundet hvis ikke der var limit?

også den ALLER sidste ting ;)

jeg vil gerne have navnene på alle brugerens posts topics, men hvis jeg skriver SELECT forumposts.topic, så får jeg kun det første, er det muligt at lave noget ala SELECT forumposts.topic(1)???



Indlæg senest redigeret d. 18.01.2008 22:28 af Bruger #11914
Det er kun muligt at tælle antallet uden LIMIT, altså skal du enten lave et nyt SQL-kald, ellers bruge en subselect:
$sql = 'SELECT table.*, (SELECT count(*) FROM table) as total FROM table';

For at fange alle rækker i en given tabel, skal du benytte php's funktioner

Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 19.01.2008 10:06 af Bruger #10216
Okay, mange tak :)



jeg vil gerne have navnene på alle brugerens posts topics, men hvis jeg skriver SELECT forumposts.topic, så får jeg kun det første, er det muligt at lave noget ala SELECT forumposts.topic(1)???

Med det mener jeg at når jeg udføre min query i phpmyadmin, så kan jeg kun se et topic, men jeg kan godt lave fx. count() på dem alle.



Indlæg senest redigeret d. 19.01.2008 11:17 af Bruger #11914
Er der mere end een række?
Har du prøvet at skrive: SELECT * FROM forumposts

Det du prøver på med (1) skal omskrives til et WHERE eller LIMIT statement for at virke. Det andet er ikke muligt.



Altså når jeg fletter tabellerne, så har jeg alle brugere på den ene side og alle deres posts på den anden side, det fungere fint fordi så er der fx. en bruger som har 10 posts tilknyttet og derfor kan med med count() tælle alle hans posts. Hvis jeg så siger: SELECT forumposts.topic, så kan jeg få feltet topic fra den første af de tilknyttede posts, men hvordan får jg fx. nummer 2?



<< < 12 > >>
t