gpt4 book ai didi

php - 在 PHP 中构建动态 sql 语句

转载 作者:行者123 更新时间:2023-11-28 23:21:21 24 4
gpt4 key购买 nike

我有那部分代码,想构建一个动态 SQL 语句:

//Build IN Clause
$sql_IN="'".implode("','", $keywords)."'";

//Build COUNT Clause
//tbd

//Get Clicks from YOURLS LOG
$sql_get_clicks="
SELECT
count(case when shorturl ='u0lg' then 1 end) u0lg,
count(case when shorturl ='3a8h' then 1 end) 3a8h,
count(case when shorturl ='abcd' then 1 end) abcd,
DATE_FORMAT((click_time),'%d.%m.%Y') Datum
FROM
`yourls_log`
WHERE
DATE(click_time) BETWEEN '20170102' AND '20170104' AND
shorturl IN (".$sql_IN.")
Group By Datum";

变量$keywords 是一个包含关键字的数组。关键字在 IN 子句中使用,也必须在“计数案例部分”中使用。 $keywords 数组中关键字的数量是可变的。有什么技巧可以让我以简单而良好的编程风格构建 count(case.. 吗?

最佳答案

您可以迭代 $keywords 数组并将每个值放入您在 SELECT 之后和 FROM 等之前附加的子句中。

$keywords = array("foo", "bar", "baz");
$inClause = "'".implode("','", $keywords)."'";
$sql = "SELECT ";
foreach($keywords as $key) {
$sql.="count(case when shorturl = '".$key."' then 1 end) ".$key.", ";
}
$sql=rtrim($sql, ", ")." ";
$sql.= "FROM `your_logs`
WHERE
DATE(click_time) BETWEEN '20170102' AND '20170104' AND
shorturl IN (".$inClause.")
Group By Datum";

var_dump($sql); 给出:

string(301) "SELECT count(case when shorturl = 'foo' then 1 end) foo, count(case when shorturl = 'bar' then 1 end) bar, count(case when shorturl = 'baz' then 1 end) baz, FROM your_logs WHERE DATE(click_time) BETWEEN '20170102' AND '20170104' AND shorturl IN ('foo','bar','baz') Group By Datum"

问候编程风格 - 你绝对应该看看 prepared statements .

关于php - 在 PHP 中构建动态 sql 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41466371/

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