如何从mysql查询多个对应的值并轻松地将它们添加到一起?

smdncfj3  于 2021-06-18  发布在  Mysql
关注(0)|答案(4)|浏览(351)

我的数据库表保存特定字体文件的宽度度量。我试图在数据库中查询$word变量中每个对应字母的字母\u box\u宽度,并将它们相加以获得$total\u word\u box\u宽度。
不幸的是,我不知道如何轻松地查询多个对应的值,然后将这些值相加。我想我把$word拆分成一个数组。。。但是我不清楚如何查询数组中的每个值。我需要对每个数组值进行单独的查询吗?

$word = "CHAD";

$array_to_query = str_split($word);

我的数据表:

使用我的示例“chad”得到的$total\u word\u box\u width的结果应该是4500。
非常感谢您的帮助。

u0njafvf

u0njafvf1#

SELECT SUM(Letter_Box_Width) FROM <table_name> WHERE Alpha IN ("C", "H", "A", "D") 这样不行吗?

jgwigjjp

jgwigjjp2#

您需要的是一个sql聚合函数—谢天谢地,sql规范只包含一个适合您需要的函数。
在不了解确切的数据库系统的情况下,我无法确定具体的代码,但请尝试以下操作:

SELECT SUM(Letter_Box_Width)
FROM <your table name>
WHERE Alpha in ('C', 'H', 'A', 'D')

如何将查询参数化,以便与其他字母值一起重用,这也取决于您的平台,但是sum()的使用应该可以解决问题的核心。

6vl6ewon

6vl6ewon3#

使用

SELECT Alpha, Letter_Box_Width FROM table WHERE Alpha IN ('C', 'H', 'A', 'D')

然后创建一个以alpha为键的数组,并计算字母\u box \u宽度之和。
在这个特定的示例中,您还可以在mysql中计算总和:

SELECT SUM(Letter_Box_Width) FROM table WHERE Alpha IN ('C', 'H', 'A', 'D')

但是如果同一个字母出现不止一次,这就行不通了,比如hello,这个字母'l'只算一次。
换句话说,

SELECT SUM(Letter_Box_Width) FROM table WHERE Alpha IN ('H', 'E', 'L', 'L', 'O')

与相同

SELECT SUM(Letter_Box_Width) FROM table WHERE Alpha IN ('H', 'E', 'L', 'O')
1rhkuytd

1rhkuytd4#

像这样的事情应该可以做你想做的。我猜你用的是 mysqli 你有一个数据库连接 $conn 但这应该很容易改变到你真正拥有的东西。

$word = 'chad';
$letters = array_unique(str_split(strtoupper($word)));
$query = "SELECT GROUP_CONCAT(Alpha) AS Alpha,
                 GROUP_CONCAT(Letter_Box_Width) AS Letter_Box_Width
          FROM letters 
          WHERE Alpha IN ('" . implode("','", $letters) . "')";
$result = mysqli_query($conn, $query) or die("unable to query database!");
if ($row = mysqli_fetch_assoc($result)) {
    $widths = array_combine(explode(',', $row['Alpha']), explode(',', $row['Letter_Box_Width']));
    $total_word_box_width = 0;
    foreach (str_split(strtoupper($word)) as $letter) {
        $total_word_box_width += $widths[$letter];
    }
}
echo $total_word_box_width;

我给你打了个电话 strtoupper 所以不管你的单词是大写还是小写。如果事实上您的表中有单独的大写和小写字符条目,那么您将在调用发生的地方删除该调用。

$letters = array_unique(str_split($word));
    foreach (str_split($word) as $letter) {

相关问题