Kom ihåg mig?
Home Menu

Menu


Låta användaren spara favoriter

 
Ämnesverktyg Visningsalternativ
Oläst 2007-08-08, 13:39 #1
Anders Larssons avatar
Anders Larsson Anders Larsson är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jan 2004
Inlägg: 3 205
Anders Larsson Anders Larsson är inte uppkopplad
Klarade millennium-buggen
Anders Larssons avatar
 
Reg.datum: Jan 2004
Inlägg: 3 205
Hej

Jag sitter och kodar en sida där medlemmar ska kunna spara favoriter bland inlägg. Än så länge har jag en databastabell (mysql) som ser ut ungefär såhär:

Kod:
id           inlägg
I den enklaste av världar tänkte jag skapa en tabell som innehåller inläggets id och användarens id.

Kod:
id           användarId

Inga problem att lista inlägg som en specifik användare har gjort som favorit. Mitt problem kommer när jag vill lista alla inlägg och visa för användaren vilka inlägg h*n har sparat som favorit. Det närmaste jag kommer är att köra en LEFT OUTER JOIN, men då kan jag inte ta hänsyn till vilken användare det är som sparat inlägget som favorit.

Antingen hjälp med att lösa det såhär, eller hjälp att hitta en ny infallsvinkel.

Miljö Mysql/PHP båda i version 5.
Anders Larsson är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-08-08, 15:04 #2
fors fors är inte uppkopplad
Medlem
 
Reg.datum: Aug 2006
Inlägg: 131
fors fors är inte uppkopplad
Medlem
 
Reg.datum: Aug 2006
Inlägg: 131
Jag förstår inte riktigt vad du vill göra.

Du kanske menar inlägg som jag har skrivit som någon annan användare har gjort som favorit?
fors är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-08-08, 15:08 #3
Anders Larssons avatar
Anders Larsson Anders Larsson är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jan 2004
Inlägg: 3 205
Anders Larsson Anders Larsson är inte uppkopplad
Klarade millennium-buggen
Anders Larssons avatar
 
Reg.datum: Jan 2004
Inlägg: 3 205
Citat:
Originally posted by fors@Aug 8 2007, 15:04
Jag förstår inte riktigt vad du vill göra.
Du kanske menar inlägg som jag har skrivit som någon annan användare har gjort som favorit?
Inläggen visas för alla användare. Det jag vill göra är att i listan där inläggen visas visa vilka inlägg (om några) som den aktiva användaren har valt som favorit.

Listningen ska alltså se ut ungefär såhär:


2007-04-05 rubrik
här står det lite text

2007-04-08 rubrik - du har valt denna som favorit
här står det lite text

2007-04-08 rubrik
här står det lite text

2007-04-11 rubrik - du har valt denna som favorit
här står det lite text

2007-04-15 rubrik
här står det lite text
Anders Larsson är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-08-08, 15:14 #4
SumoSilent SumoSilent är inte uppkopplad
Medlem
 
Reg.datum: Jul 2007
Inlägg: 60
SumoSilent SumoSilent är inte uppkopplad
Medlem
 
Reg.datum: Jul 2007
Inlägg: 60
Kanske itne den bästa lösningen men du hämtar ut allt ur databasen och sedan i while loopen så gör du en enkel if sats

If(användarId == session["användarId"])
echo 'Den här har du redan i favoriter';
else
echo 'Lägg till i favoriter';
SumoSilent är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-08-08, 15:51 #5
fors fors är inte uppkopplad
Medlem
 
Reg.datum: Aug 2006
Inlägg: 131
fors fors är inte uppkopplad
Medlem
 
Reg.datum: Aug 2006
Inlägg: 131
Citat:
Ursprungligen postat av Anders Larsson
Citat:
Ursprungligen postat av fors
Jag förstår inte riktigt vad du vill göra.
Du kanske menar inlägg som jag har skrivit som någon annan användare har gjort som favorit?
Inläggen visas för alla användare. Det jag vill göra är att i listan där inläggen visas visa vilka inlägg (om några) som den aktiva användaren har valt som favorit.
Listningen ska alltså se ut ungefär såhär:

2007-04-05 rubrik
här står det lite text
2007-04-08 rubrik - du har valt denna som favorit
här står det lite text
2007-04-08 rubrik
här står det lite text
2007-04-11 rubrik - du har valt denna som favorit
här står det lite text
2007-04-15 rubrik
här står det lite text

Något liknande enligt nedan borde fungera.
Kod:
SELECT p.id, p.post, f.post AS favorite_post
FROM posts AS p
LEFT JOIN favorites AS f ON p.id = f.post
WHERE f.user = $user
ORDER BY p.id ASC
Sedan vid utskrift
Kod:
if(isset($result['favorite_post'])) {
  echo 'redan tillagd';
} else {
  echo 'lägg till';
}
fors är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-08-08, 16:38 #6
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Om inläggen representeras av till exempel ett inläggsnummer är det enklast att ha ett textfält i användardatabasen och där lägga in inläggsnumren kommaseparerade. Den kommaseparerade strängen är lätt att göra om till en matris. Har man oförutsägbara kombinationer av data så är det alltid den enklaste vägen.
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-08-08, 16:55 #7
fors fors är inte uppkopplad
Medlem
 
Reg.datum: Aug 2006
Inlägg: 131
fors fors är inte uppkopplad
Medlem
 
Reg.datum: Aug 2006
Inlägg: 131
Citat:
Originally posted by elprisguiden@Aug 8 2007, 15:38
Om inläggen representeras av till exempel ett inläggsnummer är det enklast att ha ett textfält i användardatabasen och där lägga in inläggsnumren kommaseparerade. Den kommaseparerade strängen är lätt att göra om till en matris. Har man oförutsägbara kombinationer av data så är det alltid den enklaste vägen.
Jag vet inte om jag tycker det är så mycket lättare att göra på det viset. Dessutom blir det linjärsökning när man söker igenom om användaren har det aktuella inlägget som sin favorit. Det blir mycket om det rör sig om flera tusen användare som har samma inlägg som favorit. En annan sak är om man skall lista en användares favoritinlägg. Då måste man löpa igenom alla rader och all data, vilket är otroligt tidskrävande. Framförallt om man kommer upp i en stor volym av data.
fors är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-08-08, 17:02 #8
digiArt digiArt är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jan 2004
Inlägg: 1 429
digiArt digiArt är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jan 2004
Inlägg: 1 429
Citat:
Originally posted by elprisguiden@Aug 8 2007, 16:38
Om inläggen representeras av till exempel ett inläggsnummer är det enklast att ha ett textfält i användardatabasen och där lägga in inläggsnumren kommaseparerade. Den kommaseparerade strängen är lätt att göra om till en matris. Har man oförutsägbara kombinationer av data så är det alltid den enklaste vägen.
Nej, nej, nej, nej. Helt och totalt galet fel databastänk. Bättre att satsa på joins som fungerar.

Hur hade du tänkt att lösa det på ett smidigt sätt om någon vill ta bort en favorit?

Vad är enklast:

1. DELETE FROM tabell WHERE id = xx
2. Hämta kolumninnehåll, splitta, loopa och ta bort, spara tillbaka
digiArt är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-08-08, 17:54 #9
Anders Larssons avatar
Anders Larsson Anders Larsson är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jan 2004
Inlägg: 3 205
Anders Larsson Anders Larsson är inte uppkopplad
Klarade millennium-buggen
Anders Larssons avatar
 
Reg.datum: Jan 2004
Inlägg: 3 205
Citat:
Originally posted by fors@Aug 8 2007, 15:51
Kod:
SELECT p.id, p.post, f.post AS favorite_post
FROM posts AS p
LEFT JOIN favorites AS f ON p.id = f.post
WHERE f.user = $user
ORDER BY p.id ASC
Ja, det var så jag tänkte också. Problemet med den frågan är att jag bara kommer att få de inlägg som användaren har valt att ha som favorit:

Kod:
2007-04-08 rubrik - du har valt denna som favorit
här står det lite text

2007-04-08 rubrik
här står det lite text

2007-04-11 rubrik - du har valt denna som favorit
här står det lite text
Skippar jag WHERE f.user = $user så fungerar det som jag vill, bortsett från att hänsyn inte tas till vilken användare det är som har gjort inlägget som favorit. Hmm.
Anders Larsson är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-08-08, 18:50 #10
fors fors är inte uppkopplad
Medlem
 
Reg.datum: Aug 2006
Inlägg: 131
fors fors är inte uppkopplad
Medlem
 
Reg.datum: Aug 2006
Inlägg: 131
Citat:
Originally posted by Anders Larsson@Aug 8 2007, 16:54
Ja, det var så jag tänkte också. Problemet med den frågan är att jag bara kommer att få de inlägg som användaren har valt att ha som favorit:
Skippar jag WHERE f.user = user så fungerar det som jag vill, bortsett från att hänsyn inte tas till vilken användare det är som har gjort inlägget som favorit. Hmm.
Testa då
Kod:
SELECT p.id, p.post, f.post AS favorite_post
FROM posts AS p
LEFT JOIN favorites AS f ON p.id = f.post AND f.user = $user
ORDER BY p.id ASC
fors är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 20:35.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017