Toon posts:

[mysql] Probleem met MAX() in een insert

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hi,

Ik heb een table:

id - int(3) index
isOplossing - enum('Y', 'N')
pri - int(3)

Nu wil ik het grootste getal van pri hebben waar isOplossing='N', gemakkelijk:

SELECT MAX(pri) AS `maxPri` FROM `table` WHERE `isOplossing`='N'

Dat is simpel.
Nu dit: Ik wil een INSERT doen waarbij gelijk pri word gezet op het grootste getal + 1 waar isOplossing het zelfde is als het nieuwe record. Met andere worden:
code:
1
2
3
4
5
6
id    isOplossing    pri
1     Y          1
2     Y          2
3     N          1
4     Y          3
5     N          2

en dan een nieuwe:
code:
1
6     Y          4

Ik kan dit doen met het volgende:

INSERT INTO `table` ( `id` , `isOplossing` , `pri`) VALUES ('', 'Y', MAX(pri) + 1);

Het probleem is dat de grootste pri + 1 er word neer gezet en dat er niet naar isOplossing gekeken word.

Iemand een idee om een INSERT te doen (zonder tussen komst van php)

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:42
code:
1
2
insert into table (isoplossing, pri)
select isoplossing, max(pri) + 1 from table where isoplossing = 'y'

https://fgheysels.github.io/


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
whoami schreef op 21 januari 2003 @ 16:01:
code:
1
2
insert into table (isoplossing, pri)
select isoplossing, max(pri) + 1 from table where isoplossing = 'y'

Daar dacht ik ook aan.
Daarna dacht ik er ook weer aan dat MySQL geen subquery's ondersteunt :(
Ik kan echter geen andere manier bedenken om de gegevens zonder subquery te verkrijgen

Verwijderd

Topicstarter
Is er niet een of andere functie die er voor kan zorgen (loop me al een tijd rot te zoeken op dit probleem)

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:50

Creepy

Tactical Espionage Splatterer

Glimi schreef op 21 januari 2003 @ 16:03:

[...]

Daar dacht ik ook aan.
Daarna dacht ik er ook weer aan dat MySQL geen subquery's ondersteunt :(
Ik kan echter geen andere manier bedenken om de gegevens zonder subquery te verkrijgen
http://www.mysql.com/doc/en/INSERT_SELECT.html

MySQL ondersteunt geen sub select (dus een select in een select). Een insert met een select is geen probleem ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
BEDANKT

Je heb me echt geholpen!

Verwijderd

Topicstarter
Werkt nog niet:

The target table of the INSERT statement cannot appear in the FROM clause of the SELECT part of the query because it's forbidden in ANSI SQL to SELECT from the same table into which you are inserting. (The problem is that the SELECT possibly would find records that were inserted earlier during the same run. When using subselect clauses, the situation could easily be very confusing!)
Pagina: 1