如何在一个MySQL查询做到这一点:MySQL来选择或插入根据病情
if (select count(*)..)=10
select a record from the same table
else
insert a record into the same table
如何在一个MySQL查询做到这一点:MySQL来选择或插入根据病情
if (select count(*)..)=10
select a record from the same table
else
insert a record into the same table
如果你想使用一个单一的SQL命令(但我不知道为什么),您可以使用存储过程:
CREATE PROCEDURE `select_or_insert`()
MODIFIES SQL DATA
COMMENT 'blah blah'
BEGIN
IF ((SELECT COUNT(*) FROM `your_table`) = 10) THEN
SELECT ... FROM ... ;
ELSE
INSERT INTO ... ;
END IF;
END;
要调用您会发出以下命令的程序:
CALL `select_or_insert`();
如果执行SELECT
,语句将返回结果集。
只要只有一个网络服务器参与,我会尝试APC http://php.net/manual/de/book.apc.php与超时的一些不错的系统。
说,例如:如果一个IP已经发送在最后2秒的请求,这是当前请求应被拒绝和超时变为4秒,即10秒等
if ($timeoutLevel = apc_fetch("locked_" . $ip)){
$timeoutLevel++;
$timeout = getNextTimeout($timeoutLevel);
apc_store("locked_".$ip, $timeoutLevel, $timeout);
show_my_error_page(get_friendly_text("please do not try again for $timeout seconds! You are Blocked!"));
exit();
}
else{
$timeoutLevel = 1;
$timeout = INITIAL_PAGE_TIMEOUT;
apc_store("locked_".$ip, $timeoutLevel, $timeout);
}
之后应该在最后x秒的每IP最大约50字节的成本,所以如果它不是一个DDOS,那么网络服务器应该有这个RAM。
但要注意:一些HTML的网页包含对CSS,JavaScript,图片,声音参考,AJAX通话可能会晚一点,JSON-请求等PP
后$超时秒APC自动删除该值,所以不需要雇佣清洁女工。
我看不出你将如何在单个查询中读取或写入,我的意思是客户端应该如何读取/写入数据?你可以编写一个过程或函数来获取潜在插入的所有参数,并返回潜在的读取数据。 – flaschenpost 2013-05-08 20:11:54
我将在PHP中获取结果,然后根据返回的数据继续。我正在记录IP地址以防止暴力攻击;数字10实际上更少。选择是客户应该等待多少分钟。插入是随着时间记录他的IP。 – gom 2013-05-08 20:16:11
你想要的是一个存储过程。看看这个问题:http://stackoverflow.com/questions/6751881/mysql-stored-procedure-with-if-then-else然后读取MySQL存储过程。 http://dev.mysql.com/doc/refman/5.5/en/stored-programs-defining.html – 2013-05-08 20:19:51