webForumDet fria alternativet

Avancerad sökfunktion i mySQL

1 svar · 221 visningar · startad av mozilla

mozillaMedlem sedan juli 20011 084 inlägg
#1

Hej jag har byggt ett bildgalleri och skulle nu vilja integrera en avancerad sökfunktion. Men vet inte riktigt hur jag ska lösa det så hade hoppats på lite hjälp från er. Tabell-strukturen till bildgalleriet ser ut så här(förenklad)

tblImage (Här i ligger alla bilder)
- image_id
- image_url
- user_id (fotografernas ID-nummer)

tblImage_comment (Här finns kommentarerna till bilderna)
- comment_id
- image_id
- comment_text

tblImage_keyword (Här finns nyckelord på vad som finns i bilderna)
- keyword_id
- image_id
- keyword_text

tblImage_users (Här finns id-nummer på personer som finns med på bilderna)
- imgusr_id
- image_id
- user_id (ID-nummret på personen som är med på bilden)
- imgusr_part (Hur mycket personen är med i bilden, på en skala från 1-3)

tblImage_vote (Här finns de röster som bilderna fått)
- vote_id
- image_id
- vote_points (Betyg på en skala från 1-5)

Jag vill kunna söka :
* på en speciell fotograf (tblImage.user_id)
* på nyckelord till bilder (tblImage_keyword.keyword_text)
* på vissa personer som finns med i bilden (tblImage_users.user_id)
* endast visa de bilder som fått ett visst medelbetyg (SUM(tblImage_vote.vote_points)/COUNT(tblImage_vote.vote_points)
* söka bilder som har speciella ord i kommentaren (tblImage_comment.comment_text)

Problemet ligger i att jag vill kunna söka på flera saker samtidigt, både att ett nyckelord ska finnas med sam en viss person och en speciell fotograf.

Te.x. skrev:

Söka efter bilder på äpplen tagna av fotografen med id-nummer 1 som minst har 3:a i betyg

Sedan vill jag även kunna sortera efter datum, medelbetyg, antal kommentarer, samt hur stor del personen är med i bilden(imgusr_part)

Jag skulle vilja ha tips/hjälp på hur själva sökningen skulle se ut. Allt ifrån att spara träffar temporärt i databasen till avancerade SQL frågor. Är inte heller främmande för att göra mindre ändringar på databas-strukturen om ni har några synpunkter.

Jag söker nödvändigtvis inte färdiga lösningar utan ett bollplank för idéer :OO :e

mozillaMedlem sedan juli 20011 084 inlägg
#2

Okej, kanske för svår fråga eller för luddigt skrivit... Men jag fortsätter men en ide på hur jag kanske skulle kunna lösa det, och hoppas på kommentarer från er hur vidare ni tycker att idén är bra eller dålig, samt om ni har några andra.

Min ide går ut på att jag först hämtar ut alla bilder med äpplen i och lägger in det i en temporär databas. Sedan hämtar jag ut alla bilder som fotografen med id-nummret 1 har tagit och lägger in i samma databas. Tillsist hämtar jag ut alla bilder som har en 3:a betyg eller mer och lägger in i databasen.

När det sedan är klart hämtar jag endast ut de poster där alla tre villkoren stämmer som just den personen sökt efter.

Tabell-strukturen hade jag tänk vara något i stil med:

tblSearch
- search_id
- image_id
- user_id (Håller koll på vilken användare som sökt efter bilderna, varje användare från en sökning åt gången sedan skrivs den förra över)
- search_keyword (värdet 1 om keywordet hittades annars 0)
- search_author (värdet 1 om fotografen var rätt annars 0)
- search_users (värdet 1 om personerna hittades annars 0)
- search_points (betyget i en skala från 1-5)

Varje bild skulle ha en rad i tabellen och värdena från sökträffarna skulle läggas in på den raden.

Fördelen blir att jag inte behöver ha lika långa och jobbiga SQL satser på varje sida. Och att jag "cachar" träffarna när man söker och kan snabbt bläddra sida.

132 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)