gpt4 book ai didi

php - 优化和美化php中又长又丑的sql查询

转载 作者:行者123 更新时间:2023-11-29 22:12:56 25 4
gpt4 key购买 nike

我是 php 初学者,我在 sql 字符串优化和美观方面遇到问题。

$kiti_neplp = mysql_query("SELECT (SELECT coalesce(SUM(skaicius)*6, 0) FROM menesiai WHERE metai = '".$metaiat."' {$SQLmenuo} {$SQLskyrius} AND rdkodas = 'V3')
+(SELECT coalesce(SUM(skaicius)*4, 0) FROM menesiai WHERE metai = '".$metaiat."' {$SQLmenuo} {$SQLskyrius} AND rdkodas = 'V4')
+(SELECT coalesce(SUM(skaicius)*4, 0) FROM menesiai WHERE metai = '".$metaiat."' {$SQLmenuo} {$SQLskyrius} AND rdkodas = 'V7')
+(SELECT coalesce(SUM(skaicius)*8, 0) FROM menesiai WHERE metai = '".$metaiat."' {$SQLmenuo} {$SQLskyrius} AND rdkodas = 'V9')
+(SELECT coalesce(SUM(skaicius)*0.3, 0) FROM menesiai WHERE metai = '".$metaiat."' {$SQLmenuo} {$SQLskyrius} AND rdkodas = 'V11')
+(SELECT coalesce(SUM(skaicius)*0.3, 0) FROM menesiai WHERE metai = '".$metaiat."' {$SQLmenuo} {$SQLskyrius} AND rdkodas = 'V13')
+(SELECT coalesce(SUM(skaicius)*16, 0) FROM menesiai WHERE metai = '".$metaiat."' {$SQLmenuo} {$SQLskyrius} AND rdkodas = 'V14')
+(SELECT coalesce(SUM(skaicius)*8, 0) FROM menesiai WHERE metai = '".$metaiat."' {$SQLmenuo} {$SQLskyrius} AND rdkodas = 'V16')
+(SELECT coalesce(SUM(skaicius)*8, 0) FROM menesiai WHERE metai = '".$metaiat."' {$SQLmenuo} {$SQLskyrius} AND rdkodas = 'V17')
+(SELECT coalesce(SUM(skaicius)*4, 0) FROM menesiai WHERE metai = '".$metaiat."' {$SQLmenuo} {$SQLskyrius} AND rdkodas = 'V18')
+(SELECT coalesce(SUM(skaicius)*4, 0) FROM menesiai WHERE metai = '".$metaiat."' {$SQLmenuo} {$SQLskyrius} AND rdkodas = 'V19')
+(SELECT coalesce(SUM(skaicius)*4, 0) FROM menesiai WHERE metai = '".$metaiat."' {$SQLmenuo} {$SQLskyrius} AND rdkodas = 'V21')
+(SELECT coalesce(SUM(skaicius)*4, 0) FROM menesiai WHERE metai = '".$metaiat."' {$SQLmenuo} {$SQLskyrius} AND rdkodas = 'V22')
+(SELECT coalesce(SUM(skaicius)*4, 0) FROM menesiai WHERE metai = '".$metaiat."' {$SQLmenuo} {$SQLskyrius} AND rdkodas = 'V23')
+(SELECT coalesce(SUM(skaicius)*4, 0) FROM menesiai WHERE metai = '".$metaiat."' {$SQLmenuo} {$SQLskyrius} AND rdkodas = 'V24')
+(SELECT coalesce(SUM(skaicius)*3, 0) FROM menesiai WHERE metai = '".$metaiat."' {$SQLmenuo} {$SQLskyrius} AND rdkodas = 'V51')
+(SELECT coalesce(SUM(skaicius)*4, 0) FROM menesiai WHERE metai = '".$metaiat."' {$SQLmenuo} {$SQLskyrius} AND rdkodas = 'V52')
+(SELECT coalesce(SUM(skaicius)*16, 0) FROM menesiai WHERE metai = '".$metaiat."' {$SQLmenuo} {$SQLskyrius} AND rdkodas = 'V34')
+(SELECT coalesce(SUM(skaicius)*16, 0) FROM menesiai WHERE metai = '".$metaiat."' {$SQLmenuo} {$SQLskyrius} AND rdkodas = 'V35')
+(SELECT coalesce(SUM(skaicius)*8, 0) FROM menesiai WHERE metai = '".$metaiat."' {$SQLmenuo} {$SQLskyrius} AND rdkodas = 'V36')
as kiti_neplp");

我正在构建 sql 查询字符串,但它看起来真的很难看。这是构建又长又难看的查询的更好方法吗?因为现在我写了 10 个几乎相同的字符串(具有不同的系数和 rdkodas)。当然我可以写它并且它对我很有用,但我想学习如何以一种好的方式做到这一点。谢谢您的理解

最佳答案

如果您无法找到一种从这些数据创建数学模式的好方法,我能想到的唯一真正的事情就是创建一个数组并将其传递给一个为您构建查询字符串的函数,这样您就不会'甚至不必看到它。

$nums = array(6, 0, 3, //the numbers and data you have
4, 0, 4,
//snip
8, 0, 36);


function createQuery($nums) {
$qs = "SELECT ";
for ($i = 0; $i < count($nums); $i+= 3) { //iterating over the groups of three
$qs = $qs . "+(SELECT coalesce(SUM(skaicius)*" . $nums[$i] .
", " . $nums[$i + 1] .
") FROM menesiai WHERE metai = '" . $metaiat .
"' {$SQLmenuo} {$SQLskyrius} AND rdkodas = 'V" .
$nums[$i + 2] . "')+";
}
return $qs = $qs . "as kiti_neplp"; //return everything as a string
}

$kiti_nlpl = mysqli_query(createQuery($nums)); //execute the query

不要按原样运行此代码!在将其部署到 SQL 数据库之前对其进行测试。您可以在 PHP 页面上 echo createQuery($nums); 来查看您将进行哪种查询以及它是否与上面的查询匹配。

从长远来看,这种方法会对你有所帮助,特别是如果你要制作更多这样的东西(不寒而栗)。您可以在将 $nums 传递给函数之前声明它具有不同的值。这样做的另一个好处是,通过将蹩脚的部分隐藏在您不需要看到的地方,使实际执行查询的代码部分(mysqli_quer();)看起来非常漂亮。 :P

关于php - 优化和美化php中又长又丑的sql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31446316/

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