gpt4 book ai didi

PHP/MySQL搜索函数: there must be an easier way of achieving this?

转载 作者:行者123 更新时间:2023-11-29 14:59:54 24 4
gpt4 key购买 nike

//lets get the auto name set
$accepted = 0;
$sql = mysql_query("SELECT * FROM ".TBL_FACTIONS." WHERE f_name='no_name'");
$numrows = mysql_num_rows($sql);
//default name 1
if($numrows == 0){ $auto_name = 'no_name'; $accepted = 1;}
//default name 2
if ($accepted == 0){ $sql = mysql_query("SELECT * FROM ".TBL_FACTIONS."
WHERE f_name='no_name[02]'"); $numrows = mysql_num_rows($sql);
if($numrows == 0){$auto_name = 'no_name[02]'; $accepted = 1;} }
//default name 3
if ($accepted == 0){ $sql = mysql_query("SELECT * FROM ".TBL_FACTIONS."
WHERE f_name='no_name[03]'"); $numrows = mysql_num_rows($sql);
if($numrows == 0){$auto_name = 'no_name[03]'; $accepted = 1;} }
//default name 4
if ($accepted == 0){ $sql = mysql_query("SELECT * FROM ".TBL_FACTIONS."
WHERE f_name='no_name[04]'"); $numrows = mysql_num_rows($sql);
if($numrows == 0){$auto_name = 'no_name[04]'; $accepted = 1;} }
//default name 5
if ($accepted == 0){ $sql = mysql_query("SELECT * FROM ".TBL_FACTIONS."
WHERE f_name='no_name[05]'"); $numrows = mysql_num_rows($sql);
if($numrows == 0){$auto_name = 'no_name[05]'; $accepted = 1;} }
//default name 6
if ($accepted == 0){ $sql = mysql_query("SELECT * FROM ".TBL_FACTIONS."
WHERE f_name='no_name[06]'"); $numrows = mysql_num_rows($sql);
if($numrows == 0){$auto_name = 'no_name[06]'; $accepted = 1;} }

//-->update faction table
mysql_query("INSERT INTO ".TBL_FACTIONS." (f_id, f_name, f_status,
f_boss, f_uboss, f_rhm, f_lhm, f_r1, f_r2, f_nat,
f_funds, f_fmj, f_score,f_footer)
VALUES ('','$auto_name','0','$username','','','','','','gb','0','0','0','')");

这会检查我的 MySQL 数据库,为表中创建的行创建自动名称。像这样工作得很好,但我认为必须有一种更简单、更有效的方法来实现相同的输出?

<小时/>

另外,如何添加一个常量循环,以便它始终创建一个 no_name[XX] 插入?

最佳答案

首先,您可以删除已接受的检查,方法是将其替换为用于设置值的反向检查,并将 sql 语句中使用的值替换为 if($ numrows == 0) 之后。

请记住,再次设置变量将覆盖其之前的值。

此外,我在第一个语句周围放置了一个 if(TRUE) 条件。

//lets get the auto name set
if (TRUE) {
$auto_name = 'no_name';
$sql = mysql_query("SELECT * FROM ".TBL_FACTIONS." WHERE f_name='".$auto_name."'");
$numrows = mysql_num_rows($sql);
}

//default name 2
if ($numrows != 0) {
$auto_name = 'no_name[02]';
$sql = mysql_query("SELECT * FROM ".TBL_FACTIONS." WHERE f_name='".$auto_name."'");
$numrows = mysql_num_rows($sql);
}

//default name 3
if ($numrows != 0) {
$auto_name = 'no_name[03]';
$sql = mysql_query("SELECT * FROM ".TBL_FACTIONS." WHERE f_name='".$auto_name."'");
$numrows = mysql_num_rows($sql);
}

//default name 4
if ($numrows != 0) {
$auto_name = 'no_name[04]';
$sql = mysql_query("SELECT * FROM ".TBL_FACTIONS." WHERE f_name='".$auto_name."'");
$numrows = mysql_num_rows($sql);
}

//default name 5
if ($numrows != 0) {
$auto_name = 'no_name[05]';
$sql = mysql_query("SELECT * FROM ".TBL_FACTIONS." WHERE f_name='".$auto_name."'");
$numrows = mysql_num_rows($sql);
}

//default name 6
if ($numrows != 0) {
$auto_name = 'no_name[06]';
$sql = mysql_query("SELECT * FROM ".TBL_FACTIONS." WHERE f_name='".$auto_name."'");
$numrows = mysql_num_rows($sql);
}

//-->update faction table
mysql_query("INSERT INTO ".TBL_FACTIONS." (f_id, f_name, f_status, f_boss, f_uboss, f_rhm, f_lhm, f_r1, f_r2, f_nat, f_funds, f_fmj, f_score,f_footer) VALUES ('','$auto_name','0','$username','','','','','','gb','0','0','0','')");

您现在可能会注意到,除了 $auto_name = 'no_name'; 行之外,每个 block 都具有相同的代码,这些行仅在数字区域有所不同,并且第一个 block 始终运行,这使其非常适合 do{}while() 循环。

$numeric_part = ''; // numeric part is empty for the first time
$i = 1 // which name are we're checking

do {
$auto_name = 'no_name'.$numeric_part;
$sql = mysql_query("SELECT * FROM ".TBL_FACTIONS." WHERE f_name='".$auto_name."'");
$numrows = mysql_num_rows($sql);

//prepare for the next round trough the loop
$i++;
$numeric_part = '['.$i.']';
} while ($numrows != 0);

//-->update faction table
mysql_query("INSERT INTO ".TBL_FACTIONS." (f_id, f_name, f_status, f_boss, f_uboss, f_rhm, f_lhm, f_r1, f_r2, f_nat, f_funds, f_fmj, f_score,f_footer) VALUES ('','$auto_name','0','$username','','','','','','gb','0','0','0','')");

(请注意,此代码中存在细微差别,它使用 $noname[X] 表示条目 0-9,使用 $noname[XX] 表示条目 10-99,使用 $noname[XXX] 表示条目 10-99条目 100-999 等等,如果您希望有所不同,则需要更改 $numeric_part = '['.$i.']'; 行)

这仍然不是很有效,因为这仍然会总共访问您的数据库 5000 次,仅输入 100 个条目,并且总共会访问您的数据库 500000(50 万)次,以输入 1000 (1K) 个条目,其中最后一个查询访问数据库 1000 (1K) 次。

(您的主机/您的计算机 不会喜欢这个 )

更有效的继续方法是将条目简单地添加到末尾,并忽略之间的空条目(您现在正在重用它们。)

忽略之间的空条目只需允许 f_name 字段为 NULL 条目,并在输出中将这些条目替换为基于 f_id 字段的值即可。

(我将编写最后一部分作为练习。)

关于PHP/MySQL搜索函数: there must be an easier way of achieving this?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3501389/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com