我有一个关联数组如下:
$ a =
[
"2023-05-18" => 10.0
"2023-07-14" => 2.0
"2023-11-01" => 16.0
"2023-11-11" => 2.0
"2023-12-25" => 8.0
"2024-01-01" => 2.0
"2024-04-01" => 22.0
]在SQL查询中,我想执行如下操作:
function ($a) {
$sql = " ... some code before ...
IF (table.date IN ($a), value of date (ex 10.0), 1)
"
;
}不只是如果用大小写,什么时候,或者任何想法是根据日期在关联数组中得到值(如果它存在于数组中);
发布于 2022-09-09 10:03:07
我认为更好的方法是将逻辑与查询连接起来,并在处理时使用一个案例。就像这样
$s= "*\nCASE\n";
foreach ($yourArray as $dateKey => $dateValue) {
$s .= "WHEN DATE_FORMAT(table.date, '%Y-%m-%d') = '" . $dateKey . "' THEN
" . $dateValue . " \n"
;
}
$s .= "END\n";在查询中,您可以直接执行以下操作
"query do something
". $s ."
do something again "我希望这能帮上忙
发布于 2022-09-09 12:05:42
你对你想要的东西的描述还不太清楚,但从谈话和一些假设来看,我认为这可能归结为:
“列出PHP数组中的所有值,其中日期键与SQL表中的至少一行匹配”
如果是这样的话,那么有一种方法可以做到:
下面是一些示例代码。也许有一种更有效的方法,但这是我最初的想法:
$a =
[
"2023-05-18" => 10.0,
"2023-07-14" => 2.0,
"2023-11-01" => 16.0,
"2023-11-11" => 2.0,
"2023-12-25" => 8.0,
"2024-01-01" => 2.0,
"2024-04-01" => 22.0
];
$dates = array_keys($a);
$params = array_fill(0, count($dates), "?");
//sql to get all rows from database which match dates in the array
$sql = "SELECT `date` from `table` WHERE `date` IN (".implode(",", $params).")";
echo $sql; //just for debugging
//let's assume you're using PDO and have a connection object named $pdo, for the sake of argument
$stmt = $pdo->prepare($sql);
$result = $pdo->execute($dates);
$data = $result->fetchAll(PDO::FETCH_ASSOC);
//loop the returned set of matching dates
foreach ($data as $row)
{
//output values from the original array which match the dates returned from the database
echo $a[$row["date"]].PHP_EOL;
}相关文件:
https://stackoverflow.com/questions/73652230
复制相似问题