---
title: "En lagom klurig SQL fråga?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/68346-en-lagom-klurig-sql-fråga"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Pellefant"
published: "2003-02-14T20:01:52.000Z"
updated: "2003-02-18T18:11:57.000Z"
replies: 9
views: 419
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/68346-en-lagom-klurig-sql-fråga"
---

# En lagom klurig SQL fråga?

## #1 — Pellefant, 2003-02-14T20:01Z

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.

Permalänk: https://www.webforum.nu/p/68346

## #2 — LarsG, 2003-02-14T20:07Z

Jag skulle inte säga klurig, snarare obegriplig.

Det är mycket enklare om du visar lite exempeldata och vilket resultat du vill ha.

Permalänk: https://www.webforum.nu/p/951267

## #3 — Pellefant, 2003-02-14T20:17Z

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. :)

Permalänk: https://www.webforum.nu/p/951277

## #4 — Pellefant, 2003-02-14T20:20Z

> **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"    ;)

Permalänk: https://www.webforum.nu/p/951280

## #5 — LarsG, 2003-02-14T20:27Z

Eftersom det är mysql så får du ta det i flera steg

```php
$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.

Permalänk: https://www.webforum.nu/p/951287

## #6 — Pellefant, 2003-02-14T20:46Z

Tack, det var jättesnällt. Nu har jag lite att laborera med. :)

P.s, vad betyder essentitia preter non sans multiplicandum ? \*nyfiken\*

Permalänk: https://www.webforum.nu/p/951301

## #7 — Pellefant, 2003-02-18T17:13Z

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); 
   }
```

Permalänk: https://www.webforum.nu/p/953626

## #8 — LarsG, 2003-02-18T17:18Z

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
   }
```

Permalänk: https://www.webforum.nu/p/953632

## #9 — Pellefant, 2003-02-18T17:21Z

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.

Permalänk: https://www.webforum.nu/p/953633

## #10 — Pellefant, 2003-02-18T18:11Z

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\*   :)

Permalänk: https://www.webforum.nu/p/953674

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/68346-en-lagom-klurig-sql-fråga
