PDA

View Full Version : What is wrong with this plugin query?


fly
09-15-2005, 12:43 AM
$db->query_write("UPDATE " . TABLE_PREFIX . "thread SET open = 0 WHERE threadid = '$threadid' AND votetotal/votenum <= '5'");

Why doesn't that work?

If I change it to:
$db->query_write("UPDATE " . TABLE_PREFIX . "thread SET open = 0 WHERE threadid = '$threadid' AND votetotal <= '5'");

It works fine...

merk
09-15-2005, 12:57 AM
Because votetotal/votenum is invalid sql?

Andreas
09-15-2005, 01:02 AM
@merk
Works just fine for me ...

merk
09-15-2005, 01:03 AM
Strange.


May have been a chance in the way MySQL deals with certain syntax then? What version of MySQL flypaper / Kirby?

fly
09-15-2005, 01:13 AM
@merk
Works just fine for me ...
If I just run the query, by itself, it works fine. As a plugin, it doesn't work tho...

edit: And I think I'm using 4.0.25

Andreas
09-15-2005, 01:15 AM
Well, depends where you run that as a Plugin (eg. which Hook).
I am using an outdated mySQL 4.1.12, but I think that doesn't matter much.

fly
09-15-2005, 01:19 AM
oops. Im using 4.1.12 also.

And the hook is threadrate_add.

Andreas
09-15-2005, 01:28 AM
It think the following does happen:

1) The Threadrate Datamager gets the $threadinfo array (which contains open=1)
2) You issue the Query to close the Thread
2) save() is called on the Threadrate Datamanager,
After saving, the Datamanager instantiates a Thread Datamanager to update votetotal/votenum using $threadinfo that has passed earlier (containing open=1)
Then it writes this to the Database - undoing what your query did.

Does that make sense?

I'd hook into threaddata_presave and check the rating there, if it's below your limit set open=0.
This should work, without any Query overhead.

merk
09-15-2005, 05:23 AM
What is the error message? A bit hard to determin the problem without knowing why it "doesnt work".

fly
09-15-2005, 06:41 PM
It think the following does happen:

1) The Threadrate Datamager gets the $threadinfo array (which contains open=1)
2) You issue the Query to close the Thread
2) save() is called on the Threadrate Datamanager,
After saving, the Datamanager instantiates a Thread Datamanager to update votetotal/votenum using $threadinfo that has passed earlier (containing open=1)
Then it writes this to the Database - undoing what your query did.

Does that make sense?

I'd hook into threaddata_presave and check the rating there, if it's below your limit set open=0.
This should work, without any Query overhead.


Would that explain the 2nd query I gave in the original post working tho? btw, I will test this tonite for sure...