【问题标题】:Php pdo complex query with date带日期的php pdo复杂查询
【发布时间】:2014-04-30 09:31:09
【问题描述】:

这里有mysql数据库'track_aktivnosti'

现在我从id_akt 的 jquery ajax 值中得到。现在我需要比较日期 WHERE id_akt=22,所以我需要得到最低日期并得到这样的查询:

$result = $conn->prepare("SELECT naziv FROM track_aktivnosti WHERE datum=(lowest date) AND id_akt=:id_akt");
     $result->execute(array(':id_akt' => $_POST['id_akt']));
     $result = $result->fetchAll(); 
.
.
.
after that again but with next date so like this:

$result = $conn->prepare("SELECT naziv FROM track_aktivnosti WHERE datum=(next lowest date) AND id_akt=:id_akt");
     $result->execute(array(':id_akt' => $_POST['id_akt']));
    $result = $result->fetchAll(); 

所以对我来说最大的问题是如何找到 id_akt 的某个值的最低日期并从那里得到 naziv,vrednost

有人有想法吗?

【问题讨论】:

  • 所以首先我需要获取一些 id_akt 所有日期并进行比较,最低的是第一次查询,接下来是第二次查询... ...

标签: php jquery mysql sql pdo


【解决方案1】:

我想出了这两个解决方案。我不知道这些是不是好主意。你可以随意改变它。

第一个解决方案。

$result = $conn->prepare("SELECT datum FROM track_aktivnosti WHERE id_akt = :id_akt GROUP BY datum ORDER BY datum");

$result->execute(array(':id_akt' => $_POST['id_akt']));

$dates = $result->fetchAll();

$final_result = array();

foreach($dates as $date){

     $result = $conn->prepare("SELECT naziv, vrednost FROM track_aktivnosti WHERE id_akt = :id_akt AND datum = :datum");

     $result->execute(array(':id_akt' => $_POST['id_akt'], ':datum' => $date['datum']));

     $final_result[$date['datum']] = $result->fetchAll();
}

第二个解决方案

$result = $conn->prepare("SELECT datum FROM track_aktivnosti WHERE id_akt = :id_akt GROUP BY datum");

$result->execute(array(':id_akt' => $_POST['id_akt']));

$count = $result->rowCount();

$final_result = array();

for($i = 0; $i < $count; $i++ ){

    $limit = $i.',1';

    $result = $conn->prepare("SELECT datum FROM track_aktivnosti WHERE id_akt = :id_akt GROUP BY datum ORDER BY datum $limit");

    $result->execute(array(':id_akt' => $_POST['id_akt']));

    $result = $result->fetch(PDO::FETCH_ASSOC);

    $date = $result['datum'];

    $result = $conn->prepare("SELECT naziv, vrednost FROM track_aktivnosti WHERE id_akt = :id_akt AND datum = :datum");

    $result->execute(array(':id_akt' => $_POST['id_akt'], ':datum') => $result['datum']);

    $final_result[$date] = $result->fetchAll;

}

在这两种解决方案中,结果都存储在 $final_result 数组中,日期为键。

我从第一个解决方案中得到的结果

array(1) { ["2013-04-01"]=> array(5) { [0]=> array(4) { ["naziv"]=> string(9) "nema nema" [0]=> string(9) "nema nema" ["vrednost"]=> string(1) "1" [1]=> string(1) "1" } [1]=> array(4) { ["naziv"]=> string(9) "nema nema" [0]=> string(9) "nema nema" ["vrednost"]=> string(1) "0" [1]=> string(1) "0" } [2]=> array(4) { ["naziv"]=> string(10) "Laza Lazic" [0]=> string(10) "Laza Lazic" ["vrednost"]=> string(1) "0" [1]=> string(1) "0" } [3]=> array(4) { ["naziv"]=> string(12) "John Deer n7" [0]=> string(12) "John Deer n7" ["vrednost"]=> string(1) "0" [1]=> string(1) "0" } [4]=> array(4) { ["naziv"]=> string(10) "Pera Peric" [0]=> string(10) "Pera Peric" ["vrednost"]=> string(1) "0" [1]=> string(1) "0" } } } 

【讨论】:

  • 请修复它,我真的需要这个
  • 但是当我var_dump($final_result)时我得到了结果
  • 我只得到日期,但没有每个日期的数据...看:array(3) { ["2013-04-01"]=> array(0) { } ["2013- 09-08"]=> 数组(0) { } ["2014-06-25"]=> 数组(0) { } } $result = $conn->prepare("从 track_aktivnosti 中选择数据,其中 id_akt = :id_akt GROUP BY datum ORDER BY datum"); $result->execute(array(':id_akt' => $_POST['id_akt'])); $dates = $result->fetchAll(); $final_result = 数组(); foreach($dates as $date){ $result = $conn->prepare("SELECT naziv, vrednost FROM track_aktivnosti WHERE id_akt = :id_akt AND datum = :datum"); $result->execute(array(':id_akt' => $_POST['id_akt'], ':datum' => ...等
  • 我们这里一定漏掉了什么。嗯。我重新创建了您的示例表,并将帖子替换为 22。我已经用结果更新了我的答案。
【解决方案2】:
SELECT naziv, LOWER(datum) FROM track_aktivnosti
WHERE id_akt = id_akt

你需要查询一个较低的数据

【讨论】:

  • 是的,但有些数据在很多地方都是一样的......我会试试你的查询
  • 如果您在多个寄存器中具有相同的 id 和完全相同的日期数据,那么您将在队列中获得超过 1 个结果,但您无法再做任何事情来获得它们之间的较低,因为它们是相同的日期。
猜你喜欢
  • 2015-07-17
  • 1970-01-01
  • 2018-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多