Toon posts:

[MySQL] Toggle functie?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hey,

Bestaat er in MySQL een soort van toggle function?

Ik heb een veld topic_isClosed van het type enum dat ofwel 'YES' of 'NO' kan zijn.

Nu zoek ik een functie die de waarde kan switchen (toggle) in 1 querie (dus niet eerst kijken wat de waarde is via een andere querie). Bestaat dat in MySQL?
code:
1
UPDATE tabel SET TOGLE(veld) WHERE conditie

  • ddofborg
  • Registratie: Augustus 2000
  • Laatst online: 26-02 09:52
je kunt gewoon NOT gebruiken
dus
code:
1
UPDATE tabel SET NOT veld WHERE conditie

als veld 1 was, wordt 0 neergezet, als veld 0 was dan wordt 1 neergezet...

Verwijderd

Topicstarter
Op dinsdag 16 juli 2002 18:24 schreef ddofborg het volgende:
je kunt gewoon NOT gebruiken
dus
code:
1
UPDATE tabel SET NOT veld WHERE conditie

als veld 1 was, wordt 0 neergezet, als veld 0 was dan wordt 1 neergezet...
Bestaat dat wel in mysql? :? Hij geeft allezins een syntax error, en op de page vind ik er ook niets over.

  • ddofborg
  • Registratie: Augustus 2000
  • Laatst online: 26-02 09:52
ja...ik heb fout gemaakt... te snel copy paste gedaan :)
code:
1
UPDATE tabel SET veld = (NOT veld) WHERE conditie

misschien hoeven de haakjes niet

DD

Verwijderd

Topicstarter
Op dinsdag 16 juli 2002 18:34 schreef ddofborg het volgende:
ja...ik heb fout gemaakt... te snel copy paste gedaan :)
code:
1
UPDATE tabel SET veld = (NOT veld) WHERE conditie

misschien hoeven de haakjes niet

DD
Dat geeft geen syntax error (werkt dus), maar dat doet het niet wat het zou moeten doen. Dit komt waarschijnlijk door het feit dat NOT 'YES' geen 'NO' geeft?

EDIT:

NOT 'YES' geeft 1
NOT 'NO' geeft 1

  • ddofborg
  • Registratie: Augustus 2000
  • Laatst online: 26-02 09:52
ja, je moet 1 en 0 gebruiken voor true resp. false

Verwijderd

Topicstarter
Op dinsdag 16 juli 2002 18:40 schreef ddofborg het volgende:
ja, je moet 1 en 0 gebruiken voor true resp. false
Dmnt! Dat betekent een heel aanpaswerk als er geen andere oplossing is ;( De dood aan al die boeken die "enum types" heilig verklaren! :)

Bestaan IF structuren in MySQL?

EDIT: Ja volgens de manual :)

Dit wil wel niet:
code:
1
UPDATE tabel SET IF(STRCMP(status,'YES'),'NO','YES') WHERE conditie

Best logisch, 'YES' is geen string |:(
code:
1
UPDATE tabel SET IF(status = 'YES','NO','YES') WHERE conditie

ook niet :?

Verwijderd

code:
1
UPDATE tabel SET veld = IF(status = 'YES','NO','YES') WHERE conditie

Lijkt mij...

  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 01-09 21:49

TheDane

1.618

als je 1 en 0 gebruikt kun je ook dit doen volgens mij:
code:
1
update table set togglefield = abs(togglefield - 1) where conditie

in wat voor context moeten we dit zien trouwens :?

een veld isClosed doet me denken aan een topic oid dat gesloten is. hiervoor heeft de admin dus een formulier nodig om 't te regelen ... waarom dan niet in dat formulier de juiste waarde verwerken ?

Verwijderd

Topicstarter
Alle oplossing werken hier, MAAR alleen als ik het rechtstreeks doe in de dbase (via bijv. phpmyadmin). Doe ik het (zoals het dus moet) via mijn functie (van 2 lijntjes lang: de mysql query en een header location), dan wil het maar NIET werken. De datum wordt echter WEL aangepast (wat normaal is), maar de status niet.

Ik snap er even NIETS meer van :r
code:
1
2
3
4
5
6
7
8
function setClosedStatusTopic()
{
  global $db;
  
  $db->query("UPDATE forum_topic SET topic_isClosed = IF(topic_isClosed='YES','NO','YES') WHERE topic_id='{$_GET['topicID']}'");

  header("Location: index.php?page=forum&topicID='{$_GET['topicID']}'");
}

Ik snap er even NIETS meer van... misschien zit ik hier al te lang :9

EDIT: paar tiepfoutjes gefixt.. ja, ik code op een andere pc, dus moet alles (snel) overtypen :)

Verwijderd

Het houdt dus in dat de query goed is.

Waar haal je $db vandaan?, misschien is het wel wat om hem te globallen :P.

Verwijderd

Topicstarter
Op dinsdag 16 juli 2002 20:59 schreef NextGeneration het volgende:
Het houdt dus in dat de query goed is.

Waar haal je $db vandaan?, misschien is het wel wat om hem te globallen :P.
ja, ook vergeten te typen :)

Doe ik SET veld = 'NO' of = 'YES' werkt het. Doe ik het de IF test, werkt het niet.

Ik moet toch niet escapen?

Verwijderd

code:
1
$db->query("UPDATE forum_topic SET topic_isClosed = 'NO' WHERE topic_id='". $_GET['topicID'] ."' AND topic_isClosed = 'YES'");

Dit is hetzelfde als met het if statement.

Verwijderd

Topicstarter
Op dinsdag 16 juli 2002 21:23 schreef NextGeneration het volgende:
code:
1
$db->query("UPDATE forum_topic SET topic_isClosed = 'NO' WHERE topic_id='". $_GET['topicID'] ."' AND topic_isClosed = 'YES'");

Dit is hetzelfde als met het if statement.
Ja, akkoord, maar dan moet ik zoiezo 2 keer het statement uitvoeren, want

YES wordt NO
en NO wordt YES

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Ik wil niet vervelend zijn, maar dit is één van de ergernissen van Topix, dat een topic door een toggle gesloten wordt. Als er namelijk 2 mensen dit vlak achter elkaar doen (het topic sluiten) staat hij weer open.

Mag ik je aanraden om het met een simpele update te doen, adhv van een checkbox?
code:
1
<input type="checkbox" name="isClosed" value="closed"<?= (topic gesloten? ' checked="checked"' : ''?>>


code:
1
2
3
4
5
6
7
8
$query = "
   UPDATE
    topic
   SET 
    isClosed='". ( $_GET [ 'isClosed' ] == "closed" ? 'YES' : 'NO' ) "'
   WHERE
    topicID=$id
";

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
Op woensdag 17 juli 2002 09:45 schreef drm het volgende:
Ik wil niet vervelend zijn, maar dit is één van de ergernissen van Topix, dat een topic door een toggle gesloten wordt. Als er namelijk 2 mensen dit vlak achter elkaar doen (het topic sluiten) staat hij weer open.

Mag ik je aanraden om het met een simpele update te doen, adhv van een checkbox?
code:
1
<input type="checkbox" name="isClosed" value="closed"<?= (topic gesloten? ' checked="checked"' : ''?>>


code:
1
2
3
4
5
6
7
8
$query = "
   UPDATE
    topic
   SET 
    isClosed='". ( $_GET [ 'isClosed' ] == "closed" ? 'YES' : 'NO' ) "'
   WHERE
    topicID=$id
";
Hmm... daar heb je wel een punt ja! Ik ga het ook zo doen, want het is idd. vervelend, en vooral als je zo een kettingreactie krijgt (a sluit, b sluit (opent), a verwondert, a sluit opnieuw, b verwondert, b sluit (opent) opnieuw, etc...). Best wel grappige situaties dan ;)

Alleen moet ik wat vinden voor de layout dan ;)

Goede tip! bedankt

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

DiEana:
(a sluit, b sluit (opent), a verwondert, a sluit opnieuw, b verwondert, b sluit (opent) opnieuw, etc...). Best wel grappige situaties dan ;)
idd, ergens in W&G laatst nog gebeurd ;) 5 sluitmessages ofzo :D

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
Op woensdag 17 juli 2002 12:53 schreef drm het volgende:

[..]

idd, ergens in W&G laatst nog gebeurd ;) 5 sluitmessages ofzo :D
He :) Te verwachten dus :o

Dan maak ik gewoon 2 links na elkaar: <link open>Open</link>/<link sluit>Close</link> topic, en waarbij slechts 1 link werkt.

Offtopic: http://gerard.yoursite.nl/got/php-tiplist/#1 is best grappig :) Maareuh, punt 7, is dat niet "wat" overdreven? Ik veronderstel dat je je main page in de "default" case zet (in het geval van een switch), dus een gefakete $action kan geen kwaad? :?

EDIT: hoewel, zo is het makkelijk om secties als ?section=admin,?section=settings te blokkeren :) Best zo hoog mogelijk fouten/.. opvangen ja :)

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Op woensdag 17 juli 2002 12:53 schreef drm het volgende:

[..]

idd, ergens in W&G laatst nog gebeurd ;) 5 sluitmessages ofzo :D
ach, in /13 weten ze nog niet dat je ook kunt sluiten zonder een sluitmessage (het gebeurt hier ook vaak.. Heb ik ff een sluitmessage getikt, blijkt triggerhappy D2k me voor te zijn :) )

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

DiEana:
Maareuh, punt 7, is dat niet "wat" overdreven? Ik veronderstel dat je je main page in de "default" case zet (in het geval van een switch), dus een gefakete $action kan geen kwaad? :?

EDIT: hoewel, zo is het makkelijk om secties als ?section=admin,?section=settings te blokkeren :) Best zo hoog mogelijk fouten/.. opvangen ja :)
idd :) Je bent niet de eerste die 't opmerkt, dus ik heb er maar wat over bij gezet :)
</offtopic>

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1