Jag skulle inte säga klurig, snarare obegriplig.
Det är mycket enklare om du visar lite exempeldata och vilket resultat du vill ha.
Databaser & SQLur Databashanterare & SQL
9 svar · 403 visningar · startad av Pellefant
Hej!
Jag har detta. mySQL, PHP.
Tabell: Table1
Fält:
id int, unik, räknare
catid int
runnum int
Om catid = $a så sätt "cellen" där det högsta runnum finns till ett (1) och alla andra runnum celler ökas med ett(runnum=runnum+1)
(Om det finns flera runnum med samma högsta värde, sätt dem alla till 1)
$a är en variabel int. (om du inte är van med PHP, byt ut $a till tex "5" ovan, att få in variabeln rätt kan jag nog fixa)
mySQL, PHP
Enormt stort tack på förhand.
Jag skulle inte säga klurig, snarare obegriplig.
Det är mycket enklare om du visar lite exempeldata och vilket resultat du vill ha.
Ojdå, sorry. Jag var nog lite otydlig.
Vi antar att $a=5
Exempeltabell:
id catid runnum
1 5 12
2 2 17
3 5 19
4 7 22
5 5 11
Detta gör att de rader där catid INTE är lika med 5 faller bort angående SQL satsen, kvar är...
id catid runnum
1 5 12
3 5 19
5 5 11
Nu letar vi efter det högsta runnumvärdet, vilket vi finner är 19, då sätter vi detta till 1 istället. De andra runnum ökar vi med 1.
(Om det hade varit flera med samma högsta värde hade alla fått 1)
Så resultatet blir:
id catid runnum
1 5 13
3 5 1
5 5 12
(Raderna med id 2 och id 4 rörs alltså inte)
Det var enklare att förklara med siffror. :)
LarsG skrev:
Jag skulle inte säga klurig, snarare obegriplig.
Om jag hade kunnat ändra titeln ,så hade jag gjort det nu till "En lagom obegriplig SQL fråga" ;)
Eftersom det är mysql så får du ta det i flera steg
$q ="select max(numnum) as m from t
where catid = $a";
$c = mysql_query($q);
$r = mysql_fetch_array($c);
$m = $r['m'];
if ( !is_null($m) ) {
$q = "update t set numnum = case when numnum = $m then 1 else numnum + 1 end where catid = $a";
mysql_query($a);
}
Obegriplig var nog lite mycket sagt. Jag hade nog gissat att det var så du ville ha men det skadar inte att vara tydlig.
Det är säkert något fel i min PHP-kod men principen borde vara ok.
Tack, det var jättesnällt. Nu har jag lite att laborera med. :)
P.s, vad betyder essentitia preter non sans multiplicandum ? *nyfiken*
Hej! :)
Nu har det nog glidit över att bli mer en PHP fråga.
Jag har fyra poster(de enda i databasen) där catid är 9, och således borde runnum ändras hos dessa, men ingenting alls händer, inget felmeddelande heller. Någon som har en aning?
$a=9;
$q ="select max(runnum) as m from galset where catid = $a";
$c = mysql_query($q);
$r = mysql_fetch_array ($c);
$m = $r['m'];
if(!is_null($m) ) {
$q = "update galset set runnum = case when runnum = $m then 1 else runnum + 1 end where catid = $a";
mysql_query($a);
}
Du får väl lägga till lite testutskrifter för att se vad som händer.
$a=9;
$q ="select max(runnum) as m from galset where catid = $a";
echo "Select query " . $q . "<br>";
$c = mysql_query($q);
$r = mysql_fetch_array ($c);
$m = $r['m'];
echo "max from galset " . $m . "<br>";
if(!is_null($m) ) {
$q = "update galset set runnum = case when runnum = $m then 1 else runnum + 1 end where catid = $a";
echo "Update query " . $q . "<br>"
mysql_query($q); // bytt $a mot $q här
}
Aha, ska göra det, jag är helt kass på denna felhantering, men lär mig eftersom. Tack för exemplen på hur man gör.
Hej!
Med din kod ovan så funkade det helt plötsligt LarsG. Tack så hemsk mycket för ditt engagemang.
Här är utdatan:
Select query select max(runnum) as m from galset where catid = 9
max from galset 4
Update query update galset set runnum = case when runnum = 4 then 1 else runnum + 1 end where catid = 9
*Glad* :)