代码之家  ›  专栏  ›  技术社区  ›  Wyatt Jackson

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

  •  0
  • Wyatt Jackson  · 技术社区  · 7 年前

    我的数据库表保存特定字体文件的宽度度量。我试图在数据库中查询$word变量中每个对应字母的字母\u Box\u宽度,并将它们相加以获得$total\u word\u Box\u宽度。

    $word = "CHAD";
    
    $array_to_query = str_split($word);
    

    Font Table

    非常感谢您的帮助。

    4 回复  |  直到 7 年前
        1
  •  0
  •   Nick SamSmith1986    7 年前

    像这样的事情应该可以做你想做的。我猜你用的是 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) {
    
        2
  •  0
  •   Robin Zigmond    7 年前

    SELECT SUM(Letter_Box_Width) FROM <table_name> WHERE Alpha IN ("C", "H", "A", "D")

        3
  •  0
  •   Julian Suggate    7 年前

    您需要的是一个SQL聚合函数—谢天谢地,SQL规范只包含一个适合您需要的函数。

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

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

        4
  •  0
  •   RalfFriedl    7 年前

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

    在这个特定的示例中,您还可以在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')