Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2012-02-27, 17:07
  #1
Medlem
Startade för ett tag sedan upp trueshit.org och folk klagade på att samma bilder kom upp hela tiden så jag löste detta genom att använda mig av denna sqlkod:

SELECT Trueshit.ID FROM Trueshit LEFT JOIN IP ON Trueshit.ID=IP.ID AND IP='$ip' WHERE IP.ID IS NULL ORDER BY RAND() LIMIT 1

Sidan blev väldigt seg men jag måste ha kvar funktionen som den koden gör.

någon som vet ett snabbare alternativ eller har något bra tips?
Citera
2012-02-27, 17:49
  #2
Moderator
Protons avatar
Citat:
Ursprungligen postat av abiz2
Startade för ett tag sedan upp trueshit.org och folk klagade på att samma bilder kom upp hela tiden så jag löste detta genom att använda mig av denna sqlkod:

SELECT Trueshit.ID FROM Trueshit LEFT JOIN IP ON Trueshit.ID=IP.ID AND IP='$ip' WHERE IP.ID IS NULL ORDER BY RAND() LIMIT 1

Sidan blev väldigt seg men jag måste ha kvar funktionen som den koden gör.

någon som vet ett snabbare alternativ eller har något bra tips?
Hur ser dina tabeller ut? Vad har du för index och nycklar i dem till exempel? Vilken av tabellerna innehåller, eller kan tänkas innehålla flest poster framöver?

Slutligen, den där frågan ser inte överdrivet kompilcerad ut för MySQL. Är du säker på att det är den frågan och inte nån annan som är problemet?
Citera
2012-02-27, 18:04
  #3
Medlem
Citat:
Ursprungligen postat av Proton
Hur ser dina tabeller ut? Vad har du för index och nycklar i dem till exempel? Vilken av tabellerna innehåller, eller kan tänkas innehålla flest poster framöver?

Slutligen, den där frågan ser inte överdrivet kompilcerad ut för MySQL. Är du säker på att det är den frågan och inte nån annan som är problemet?

Tabell IP innehåller 3 columner: IP, Date, ID där tillkommer det en rad för varje bild en person kollar på.
Så denna innehåller redan betydligt mycker mer än den andra tabellen Trueshit.

Trueshit innehåller ID, URL, Views, Tags, DATE, True2, WTF, Pro och här lagras alla bilder så att säga och givetvis så uppdateras Views för varje visning och True2, WTF, Pro uppdateras om någon lägger en röst.

Nu när jag skriver detta så kom jag på att segheten kanske kan bero på att tabellen IP innehåller 68 338 rader just nu, och denna måste sökas igenom efter rader med samma ip som användarens varje gång någon kollar på en bild. Ska testa att tömma den, sen återkommer jag.

EDIT: Det berodde på att det var så många rader i IP, tömde den och sedan gick den hur bra som helst.

Men om jag håller på och tömmer den så uppstår ett problem med att folk kommer kunna få upp samma bilder hela tiden, går det att lösa så att rader över 1 dag gamla tas bort igenom phpmyadmin, eller måste jag lösa detta i en php fil?
__________________
Senast redigerad av abiz2 2012-02-27 kl. 18:12.
Citera
2012-02-27, 18:06
  #4
Moderator
Protons avatar
Citat:
Ursprungligen postat av abiz2
Tabell IP innehåller 3 columner: IP, Date, ID där tillkommer det en rad för varje bild en person kollar på.
Så denna innehåller redan betydligt mycker mer än den andra tabellen Trueshit.

Trueshit innehåller ID, URL, Views, Tags, DATE, True2, WTF, Pro och här lagras alla bilder så att säga och givetvis så uppdateras Views för varje visning och True2, WTF, Pro uppdateras om någon lägger en röst.

Nu när jag skriver detta så kom jag på att segheten kanske kan bero på att tabellen IP innehåller 68 338 rader just nu, och denna måste sökas igenom efter rader med samma ip som användarens varje gång någon kollar på en bild. Ska testa att tömma den, sen återkommer jag.
Börja med att sätta ett index på ip och kolla vad som händer isf.
Citera
2012-02-27, 18:14
  #5
Medlem
Citat:
Ursprungligen postat av Proton
Börja med att sätta ett index på ip och kolla vad som händer isf.

Han ta bort allt, men det är ingen fara, men jag satte index på IP nu så får se hur det blir framöver. Vore ju gött att slippa ta bort raderna efter en viss tid.

Tack Proton!
Citera
2012-02-27, 18:16
  #6
Medlem
Är det inte lättare att ha en rad per ip per bild? eftersom att nu kan en ip ha 45124516234152 rader för en bild :/
Citera
2012-02-27, 18:20
  #7
Moderator
Protons avatar
Citat:
Ursprungligen postat av abiz2
Han ta bort allt, men det är ingen fara, men jag satte index på IP nu så får se hur det blir framöver. Vore ju gött att slippa ta bort raderna efter en viss tid.

Tack Proton!
Din join ser misstänkt ut btw. Varför joinar du på både id och ip? borde ju räcka att joina på id där
och sätta ip-kollen i where-villkoret?
Citera
2012-02-27, 18:22
  #8
Medlem
Citat:
Ursprungligen postat av Proton
Din join ser misstänkt ut btw. Varför joinar du på både id och ip? borde ju räcka att joina på id där
och sätta ip-kollen i where-villkoret?

Efter flera timmar av försöka lösa den funktionen som den koden gör så vad jag om hjälp på ett forum och fick den koden, den fungerade så jag har inte tänkt något mer på det :P
Citera
2012-02-27, 18:23
  #9
Medlem
Citat:
Ursprungligen postat av LilleKlump
Är det inte lättare att ha en rad per ip per bild? eftersom att nu kan en ip ha 45124516234152 rader för en bild :/

Där sa du något, ska kolla så jag inte redan har det så, annars är det väldigt klantigt gjort av mig.
Citera
2012-02-27, 18:47
  #10
Medlem
Citat:
Ursprungligen postat av Proton
Börja med att sätta ett index på ip och kolla vad som händer isf.

Kan ju fråga vad funktionen Index gör för något så kanske man lär sig något på kuppen också
Citera
2012-02-27, 18:51
  #11
Moderator
Protons avatar
Citat:
Ursprungligen postat av abiz2
Kan ju fråga vad funktionen Index gör för något så kanske man lär sig något på kuppen också
Index är ingen funktion, det är en moddning av en tabell.

Enkelt förklarat är det att databasen bygger upp ledtrådar till var den kan tänkas hitta informationen i tabellen nånstans. På så sätt behöver inte tabellen undersökas en post i taget, utan databasen börjar med att kolla i indexet var den borde börja leta istället.

Det är klart, har du en tabell med många insert så blir ju indexet rätt fort föråldrat och ger inte samma effekt.

http://en.wikipedia.org/wiki/Database_index

http://dev.mysql.com/doc/refman/5.0/...ate-index.html
Citera
2012-02-27, 19:04
  #12
Medlem
Citat:
Ursprungligen postat av Proton
Index är ingen funktion, det är en moddning av en tabell.

Enkelt förklarat är det att databasen bygger upp ledtrådar till var den kan tänkas hitta informationen i tabellen nånstans. På så sätt behöver inte tabellen undersökas en post i taget, utan databasen börjar med att kolla i indexet var den borde börja leta istället.

Det är klart, har du en tabell med många insert så blir ju indexet rätt fort föråldrat och ger inte samma effekt.

http://en.wikipedia.org/wiki/Database_index

http://dev.mysql.com/doc/refman/5.0/...ate-index.html

Tack för infon, Nu har jag gjort IP till index oxh så har jag fixat så det inte blir flera rader för samma ip/id också, så förhoppningsvis så slipper jag en seg hemsida i fortsättning
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback