【问题标题】:SELECT statement not working in mariadb 10.0 but works in mariadb 5.5SELECT 语句在 mariadb 10.0 中不起作用,但在 mariadb 5.5 中起作用
【发布时间】:2016-12-17 20:03:39
【问题描述】:

由于某些原因,以下 select 语句在 mariadb 10 中无法执行,但在 mariadb 5.5 中执行良好。在 5.5 中,它从这两个时间范围内的数据库中选择值。无法在 10 上选择任何一个。使用相同的数据库。问题可能是什么?任何人? 谢谢。

$_SESSION['post-data'] = $_POST;

$t1 = $_SESSION['post-data']['t1'];
$t2 = $_SESSION['post-data']['t2'];
$time1 = mysqli_real_escape_string($conn, $t1);
$time2 = mysqli_real_escape_string($conn, $t2);

$sql =  "SELECT DISTINCT msisdn FROM customer WHERE DATE_FORMAT(time_paid,'%Y-%c-%e') 
     BETWEEN ADDDATE('$time1',INTERVAL 0 HOUR) 
        AND ADDDATE('$time2',INTERVAL '23:59' HOUR_MINUTE)";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
  echo "Number of Recipients: ";  echo "$result->num_rows <br> <br>";
    // output data of each row
    while($row = $result->fetch_assoc()) {
 $mobilenumber[] = $row['msisdn'];

    }
} else {
    echo "No Contacts to Display";
}

$mob_numbers = implode(", " , $mobilenumber);
echo "$mob_numbers";
$_SESSION['numbers'] = $mob_numbers;

【问题讨论】:

  • 你用的是哪个mysql版本?
  • Server version: 5.5.49-MariaDB-1ubuntu0.14.04.1 (Ubuntu) 中工作正常,但在Server version: 10.0.26-MariaDB-1~precise mariadb.org binary distribution 中失败。
  • 有错误吗?结果错误?两个数据库中的数据是否相同?
  • @Philipp 相同的数据。没有错误,但回显没有要显示的联系人
  • 只需echo $sql; 检查是否有不同之处...

标签: php mysql mariadb


【解决方案1】:

假设 time_paid 是 DATEDATETIMETIMESTAMP,请不要使用 DATE_FORMAT。这将让您使用索引。然后添加这个复合INDEX(time_paid, msisdn);这将是有帮助和“覆盖”的。

然后把BETWEEN改成:

SELECT DISTINCT msisdn
    FROM customer
    WHERE time_paid >= $time1
      AND time_paid  < $time2 + INTERVAL 1 DAY

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多