WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   mySQL-fråga (https://www.wn.se/forum/showthread.php?t=11701)

Kristofer 2006-01-09 16:34

Hej!
Undrar om det finns något SQL-kommando, jag kör mySQL, som i en SELECT-förfrågan kan "tjuvkika" på ett columnvärde i nästkommande rad.

Alltså, för att förtydliga, säg att vi har tabellen:
Citat:


id, antal, pris
1, 50, 2000
2, 100, 1000
3, 10, 100

Om jag här gör en SELECT * from table... ORDER by ID ASC så går den ju naturligt och tittar på mina värden i rad 1 först. Här behöver jag på ett bra sätt kunna komma åt pris för rad 2. När jag sen väl är på rad 2 och skriver ut data därifrån behöver jag få fram pris från rad 3 för en liknande beräkning osv..

Finns det något smidigt sätt att tjuvkika framåt för att lösa detta utan att behöva vara så drastisk att man gör nya databasanslutningar eller något annat onödigt krävande?

jimmie 2006-01-09 16:49

Varför inte använda två variabler?

$result = mysql_query($sqlstring)
or die(mysql_error());

$data1 = null;
while($data2 = mysql_fetch_assoc($result)) {

if($data1 != null) {

//Gör det du ska göra, i $data1 ligger posten, i $data2 ligger nästa post

}

$data1 = $data2;
}

Givetvis får du anpassa så att sista posten behandlas på det sättet du vill men med ovan som grund har man ett effektivt sätt att lösa uppgiften.

Kristofer 2006-01-09 17:11

..och finns det någon som kan hjälpa mig att översätta mysql_fetch_assoc till ASP?

eg0master 2006-01-09 17:18

Det jimmie egentligen menar är väl att du kan lösa det enkelt i en loop istf med SQL (vilket ju självklart är fult möjligt med antingen subselect eller outer joins).
I princip är det han menar att när du befinner dig på en rad kan du ju även komma åt nästa rad i ditt resultatset.

Kristofer 2006-01-09 17:46

Okej, då är det alltså subselect och outer joins jag måste läsa på lite om. Har bara mycket begränsade kunskaper när det gäller SQL men det är nog inte så svårt nu när jag vet nyckelorden iaf, bara att läsa förhoppningsvis :)

jimmie 2006-01-09 17:48

Citat:

Originally posted by Kristofer@Jan 9 2006, 19:11
..och finns det någon som kan hjälpa mig att översätta mysql_fetch_assoc till ASP?
Antar att du kör vanliga asp(ej .Net)

mysql_fetch_assoc betyder att man hämtar en rad ur resultatsetet. I asp kanske du får lösa det så här typ:

Kod:

dim pris1
dim pris2
pris1 = RecSet("pris");
Do Until RecSet.EOF

 pris2 = RecSet("pris")

 %%Gör det du ska göra
 
 pris1 = pris2
 RecSet.MoveNext
Loop

Nu kommer pris2 att innehålla nästa pris och pris1 innehåller nuvarande pris. Du får givetvis spara alla variabler du behöver på detta sättet. PHP är lite smidigare på detta sättet då man endast behöver spara en array som innehåller all data. Man behöver alltså inte lösa problemet i SQL, blir aningen krångligare än ovan metod skulle jag tro.

Har inte programmerat asp på 4 år så jag fråntar mig allt ansvar för koden. ;)

edit: Jo som gustav säger är det lite smidigare att först göra en hämtning och sedan köra loopen, slipper kontrollen varje varv. Var lite för snabb när jag skrev lösningen.

Gustaf 2006-01-09 17:50

det är mycket ineffektivt att använda subquerise och eller outer joins. Bättre att göra det i ASP/PHP då när du har en så pass simpel fråga. Det finns inget bra sätt att kolla på nästa rad om kör mySQL, då nästa rad inte är känd när den rad du befinner dig på evalueras.

Förstår inte riktigt varför den föreslagna lösningen inte passade. Du tar fram resultat nr1, sen startar du loopen. Då tar du fram resultat nr2, och har nr1 sparat så att du kan använda bägge. Sedan sparar du nr2 och går vidare till nr3 osv osv.

Kristofer 2006-01-09 20:35

Har gjort en ganska ful och bökig lösning utifrån det som sagts här. Var rätt många variabler som behövde sparas om men det funkar bra nu :)


Alla tider är GMT +2. Klockan är nu 21:25.

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