webForumDet fria alternativet

En viss posts sorteringsnummer?

10 svar · 353 visningar · startad av bassebhu

bassebhuMedlem sedan nov. 20014 028 inlägg
#1

Hej alla glada!

Om jag vill hämta en post och dessutom vill ha reda på vilken placering denna får om jag hade hämtat alla poster sorterat efter ett visst fält... Hur gör jag då på mest optimerade sätt...? Tanken är sedan att använda detta för att hämta en post åt gången snabbt så det ska helst inte vara en alltför krävande kodsnutt. (man klickar för att få nästa post alltså...)

Jag tänkte om man kunde pilla in nåt i:

$sql = "SELECT * FROM table WHERE id = '".$id."' ORDER BY date LIMIT 0,1";

Jag vill alltså veta vilken placering denna post hade fått om jag hade hämtat alla poster från tabellen.

Går det att lösa med en sql-fråga? Om inte, går det att lösa med två små sql-frågor? ;)

Tackar för förslag!

NiklassonMedlem sedan nov. 2000823 inlägg
#2

Tråden flyttas från PHP..

pettssonMedlem sedan jan. 2002777 inlägg
#3

Vet inte hur du ska lösa positionsfrågan, men om sql-satserna ska vara så snabba som möjligt ska du inte använda LIMIT, det ökar tiden som krävs rätt duktigt. Hämta alla och använd mysql_data_seek istället.

Och varför skriver du "... WHERE id = '".$id.'"..." istället för "... WHERE id = $id ..."?

bassebhuMedlem sedan nov. 20014 028 inlägg
#4

Hur använder jag mysql_data_seek då?

Jag har skrivit '".$id.'" för att jag har hört att det är säkrare med enkelfnuttar runt värdena när man kollar mot databasen. Fel? Och att skriva '$id' funkar ju såklart inte...

@ndersMedlem sedan juni 200026 914 inlägg
#5

Apostrofer ska du ha runt värdet om fältet är av strängtyp (varchar / char / text), eller datumtyp. Inte om det är ett talfält. Är inte id-fältet av någon sorts taldatatyp?

LarsGMedlem sedan dec. 200012 465 inlägg
#6

men om sql-satserna ska vara så snabba som möjligt ska du inte använda LIMIT

Det ställer jag mig ytterst tveksam till. Vad har du för belägg för det? I vissa fall är det förödande att inte ha med limit.

bassebhuMedlem sedan nov. 20014 028 inlägg
#7

Jo jag känner till att man inte brukar ha fnuttisar om det är tal, men då någon sa att det var säkrare med fnuttar så har jag kört på det även på tal då det har fungerat, men basseboy byter sätt nu då :)

bassebhuMedlem sedan nov. 20014 028 inlägg
#8

Ingen som har förslag ang. sorteringen?

spangoMedlem sedan juni 20006 147 inlägg
#9

bassebhu skrev:

Ingen som har förslag ang. sorteringen?

Du borde väl kunna lösa det med en subquery (brasklapp utfärdas, är en aning ringrostig):

SELECT *, (SELECT COUNT(*) FROM table t2 WHERE t2.date > t1.date) AS num_rows_greater 
FROM table t1 WHERE id = någonting ORDER BY date LIMIT 0,1

Sen är subquerys inte direkt det bästa om man vill ha snabba svar, men det är så det är.

spangoMedlem sedan juni 20006 147 inlägg
#10

bassebhu skrev:

Jo jag känner till att man inte brukar ha fnuttisar om det är tal, men då någon sa att det var säkrare med fnuttar

Vill du ha det säker ska du konvertera det till ett tal innan du bakar in det i strängen, så att du inte får med något annat än själva det numeriska värdet. Typ injicerad SQL-kod.

pettssonMedlem sedan jan. 2002777 inlägg
#11

LarsG skrev:

men om sql-satserna ska vara så snabba som möjligt ska du inte använda LIMIT

Det ställer jag mig ytterst tveksam till. Vad har du för belägg för det? I vissa fall är det förödande att inte ha med limit.

Jaså? Det var du som tipsade om det här, så jag prövade och fick resultatet att det tog lite mer än dubbelt så lång tid att hämta 20 rader m.h.a. LIMIT än att hämta alla och sedan söka inom resultatet. Fel?

Genererad på 381 ms · cache AV · v20260730165559-full.f96bc7eb