使用 TCL 删除变量
Using TCL to remove a variable
如果计数值为 0,我将尝试从列表中删除某些用户名,以便仅显示计数大于 0 的用户。我尝试了几种方法都没有成功,所以我希望能得到一些正确方向的指示
if {![mysqlsel $db_handle "
SELECT `crew`.`user`,IF(`count`,`count`,0) AS count
FROM (SELECT DISTINCT `user` FROM `crew`) AS crew
LEFT JOIN (
SELECT `user`,COUNT(`user`) AS count
FROM `info`
WHERE `timestamp` >= UNIX_TIMESTAMP((LAST_DAY(NOW()) + INTERVAL 1 DAY) - INTERVAL 1 MONTH)
GROUP BY `user`) AS info
ON crew.user = info.user $refine
ORDER BY `count` DESC
"]} then {
putnow "PRIVMSG $chan_(kadd) :No results found\."
return 0
}
mysqlmap $db_handle {user count} {
if { $count >= $quota_(amount) || $user != "somename" } {
putnow "PRIVMSG $chan_(kadd) : \[[=10=]314[num [incr place]][=10=]3\] [=10=]314$user[=10=]3 is [=10=]33PASSiNG[=10=]3 [=10=]314>[=10=]3 [=10=]303$count mile(s) this month[=10=]3"
} else {
putnow "PRIVMSG $chan_(kadd) : \[[=10=]314[num [incr place]][=10=]3\] [=10=]314$user[=10=]3 is [=10=]34FAiLiNG[=10=]3 [=10=]314>[=10=]3 [=10=]304$count mile(s) this month[=10=]3"
}
}
虽然将过滤移动到查询中是这里的正确方法,但您也可以在 Tcl 端执行此操作,因为我敢打赌 mysqlmap
遵循标准的 Tcl 循环结果代码约定:
mysqlmap $db_handle {user count} {
if {$count == 0} {
# Skip this one entirely
continue
}
if { $count >= $quota_(amount) || $user != "somename" } {
putnow "PRIVMSG $chan_(kadd) : \[[=10=]314[num [incr place]][=10=]3\] [=10=]314$user[=10=]3 is [=10=]33PASSiNG[=10=]3 [=10=]314>[=10=]3 [=10=]303$count mile(s) this month[=10=]3"
} else {
putnow "PRIVMSG $chan_(kadd) : \[[=10=]314[num [incr place]][=10=]3\] [=10=]314$user[=10=]3 is [=10=]34FAiLiNG[=10=]3 [=10=]314>[=10=]3 [=10=]304$count mile(s) this month[=10=]3"
}
}
未经任何测试,以下是查询添加过滤器的方式。
if {![mysqlsel $db_handle "
SELECT `crew`.`user`, `info`.`count` AS `count`
FROM (SELECT DISTINCT `user` FROM `crew`) AS `crew`
LEFT JOIN (
SELECT `user`, COUNT(`user`) AS `count`
FROM `info`
WHERE `timestamp` >= UNIX_TIMESTAMP((LAST_DAY(NOW()) + INTERVAL 1 DAY) - INTERVAL 1 MONTH)
GROUP BY `user`) AS `info`
ON `crew`.`user` = `info`.`user`
WHERE `count` > 0 -- <<< This line here <<<
$refine
ORDER BY `count` DESC
"]} then {
putnow "PRIVMSG $chan_(kadd) :No results found\."
return 0
}
您需要调整 $refine
子句的生成,以说明它前面总是有一个 WHERE
的事实。 (此外,您知道它是一个潜在的 SQL 注入向量吗?向用户呈现任何形式的复杂查询总是可能很棘手,因为强大的功能会带来很大的滥用机会。)
如果计数值为 0,我将尝试从列表中删除某些用户名,以便仅显示计数大于 0 的用户。我尝试了几种方法都没有成功,所以我希望能得到一些正确方向的指示
if {![mysqlsel $db_handle "
SELECT `crew`.`user`,IF(`count`,`count`,0) AS count
FROM (SELECT DISTINCT `user` FROM `crew`) AS crew
LEFT JOIN (
SELECT `user`,COUNT(`user`) AS count
FROM `info`
WHERE `timestamp` >= UNIX_TIMESTAMP((LAST_DAY(NOW()) + INTERVAL 1 DAY) - INTERVAL 1 MONTH)
GROUP BY `user`) AS info
ON crew.user = info.user $refine
ORDER BY `count` DESC
"]} then {
putnow "PRIVMSG $chan_(kadd) :No results found\."
return 0
}
mysqlmap $db_handle {user count} {
if { $count >= $quota_(amount) || $user != "somename" } {
putnow "PRIVMSG $chan_(kadd) : \[[=10=]314[num [incr place]][=10=]3\] [=10=]314$user[=10=]3 is [=10=]33PASSiNG[=10=]3 [=10=]314>[=10=]3 [=10=]303$count mile(s) this month[=10=]3"
} else {
putnow "PRIVMSG $chan_(kadd) : \[[=10=]314[num [incr place]][=10=]3\] [=10=]314$user[=10=]3 is [=10=]34FAiLiNG[=10=]3 [=10=]314>[=10=]3 [=10=]304$count mile(s) this month[=10=]3"
}
}
虽然将过滤移动到查询中是这里的正确方法,但您也可以在 Tcl 端执行此操作,因为我敢打赌 mysqlmap
遵循标准的 Tcl 循环结果代码约定:
mysqlmap $db_handle {user count} {
if {$count == 0} {
# Skip this one entirely
continue
}
if { $count >= $quota_(amount) || $user != "somename" } {
putnow "PRIVMSG $chan_(kadd) : \[[=10=]314[num [incr place]][=10=]3\] [=10=]314$user[=10=]3 is [=10=]33PASSiNG[=10=]3 [=10=]314>[=10=]3 [=10=]303$count mile(s) this month[=10=]3"
} else {
putnow "PRIVMSG $chan_(kadd) : \[[=10=]314[num [incr place]][=10=]3\] [=10=]314$user[=10=]3 is [=10=]34FAiLiNG[=10=]3 [=10=]314>[=10=]3 [=10=]304$count mile(s) this month[=10=]3"
}
}
未经任何测试,以下是查询添加过滤器的方式。
if {![mysqlsel $db_handle "
SELECT `crew`.`user`, `info`.`count` AS `count`
FROM (SELECT DISTINCT `user` FROM `crew`) AS `crew`
LEFT JOIN (
SELECT `user`, COUNT(`user`) AS `count`
FROM `info`
WHERE `timestamp` >= UNIX_TIMESTAMP((LAST_DAY(NOW()) + INTERVAL 1 DAY) - INTERVAL 1 MONTH)
GROUP BY `user`) AS `info`
ON `crew`.`user` = `info`.`user`
WHERE `count` > 0 -- <<< This line here <<<
$refine
ORDER BY `count` DESC
"]} then {
putnow "PRIVMSG $chan_(kadd) :No results found\."
return 0
}
您需要调整 $refine
子句的生成,以说明它前面总是有一个 WHERE
的事实。 (此外,您知道它是一个潜在的 SQL 注入向量吗?向用户呈现任何形式的复杂查询总是可能很棘手,因为强大的功能会带来很大的滥用机会。)