[MySQL] Waardes in een uniek veld wisselen met 1 query

Pagina: 1
Acties:

  • Mafkees
  • Registratie: Oktober 2003
  • Niet online
Hoi allemaal. Ik heb de volgende tabel die objecten op een pagina beschrijft.


code:
1
2
3
4
5
6
7
page_object tabel

id  | page_id   | object_id   | order_index
----+-----------+-------------+--------------
1   | 1         | 1           | 1
2   | 1         | 3           | 2
3   | 1         | 3           | 3

De order_index mag per page_id maar 1x voorkomen. Je kunt niet twee objecten op dezelfde plek laten zien namelijk, ze komen altijd achter (of onder) elkaar. Nu wil ik de order_index van id 2 en 3 omwisselen, in 1 query. Ik mag niet even snel van de order_index bij id 3 order_index 2 maken, omdat die al bestaat. De waarde van order_index is zoals gezegd uniek per page_id.

Een workaround is om een order_index even een NULL waarde of 99999 te geven, iets in die trend. Maar je begrijpt, da's niet echt charmant.

Dus mijn vraag: hoe kan ik de waardes van twee unieke velden omwisselen in 1 query?

Thx :)

  • Mafkees
  • Registratie: Oktober 2003
  • Niet online
heb alleen niks te doen met javascript...

En ik heb een UNIQUE index op page_id en order_index.. Als ik een query bouw:

SQL:
1
2
3
UPDATE page_object
SET order_index = ELT(order_index, 1, 3, 2)
WHERE page_id = '1'


dan krijg ik dus terug dat de combinatie van page_id 1 en order_index 3 al voorkomt..

[ Voor 52% gewijzigd door Mafkees op 06-05-2007 16:21 ]


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
ik zie dat het in dit topic: [SQL] 'Rangorde' probleem.
hier ook over gaat... ook al was jij eerder ...

de enige oplossing die ik op dit moment even zie is, om de primary key te wijzigen door een kolom toe te voegen met een unieke id voor iedere regel en die de PK te maken... maar dat is vast niet wat je wilt horen ;)

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
En zoals ik al in dat topic zei, de eenvoudigste oplossing die ik zie is een temp waarde tijdens het omwisselen. Kolommen toevoegen/verwijderen en indexen veranderen zijn grote structuurwijzigingen en dat is gewoon echt een no-go op een beetje tabel.

{signature}