簡體   English   中英

PHP:從mysql解析ID的第3位和第4位的所有數據

[英]PHP: Parse all data from mysql where the 3rd and 4th digit of the id

我有一個帶有一些奇怪ID的mysql表,如下所示:

╔═══╦════════════╦═════════════╦═══════════╦═════════════╦═══════════╗
║   ║     id     ║   user_id   ║  hours_a  ║   hours_b   ║  hours_c  ║
╠═══╬════════════╬═════════════╬═══════════╬═════════════╬═══════════╣
║ 1 ║ 010120149  ║     9       ║    10     ║     6       ║    23     ║
║ 2 ║ 0212201310 ║     10      ║    2      ║     8       ║    10     ║
║ 3 ║ 021220138  ║     8       ║    1      ║     4       ║     9     ║
║ 4 ║ 020120149  ║     9       ║    3      ║     8       ║    10     ║
╚═══╩════════════╩═════════════╩═══════════╩═════════════╩═══════════╝

我試圖解析用戶ID 9的總時間,即2014年1月和2014年。從表中可以看到,這是第一行和最后一行。

例如, 01 01 2014 9是第一行的ID,代表DD / MM / YYYY / ID

我希望能夠檢索user_id = 9的所有小時數( 分別為hours_a,hours_b和hours_c),其中day = 01-31(循環遍歷所有天?), month = 01year = 2014

要以這樣的方式導出:

{"userid":"9","month":"01","year":"2014","total_hours_a":"13","total_hours_b":"14","total_hours_c":"33"}

該ID分別代表Day,Month,Year和Userid: 在此處輸入圖片說明


目前我在做什么

目前,我正在選擇所有表格:

$query="SELECT * FROM `weird_table` WHERE `id` LIKE 9";

將其打印到編碼的json:

$result = mysql_query($query);
$temp = 0;
$json = array();

while ($row = mysql_fetch_array($result))
    {
    $json[$temp]['id'] = $row['id'];
    $json[$temp]['userid'] = $row['userid'];
    $json[$temp]['hours_a'] = $row['hours_a'];
    $json[$temp]['hours_b'] = $row['hours_b'];
    $json[$temp]['hours_c'] = $row['hours_c'];
    }

$temp++;
}

print json_encode($json);
mysql_close();

然后在客戶端(因為我是前端開發人員),我將其匹配並相加並求和,以獲得所需的結果。 不必為所有這些麻煩工作而給用戶帶來太多的CPU痛苦; 我希望服務器進行工作並准確地向我打印我正在尋找的內容。

嘗試這個:

SELECT *, (hours_a + hours_b + hours_c) totalHours
FROM weird_table 
WHERE user_id = 9 AND 
      STR_TO_DATE(SUBSTRING(id, 1, 8), '%d%m%Y') BETWEEN '2014-01-01' AND '2014-01-31'

要么

SELECT *, (hours_a + hours_b + hours_c) totalHours 
FROM weird_table 
WHERE user_id = 9 AND SUBSTRING(id, 3, 6) = '012014'

要么

SELECT *, (hours_a + hours_b + hours_c) totalHours
FROM weird_table 
WHERE user_id = 9 AND 
      YEAR(STR_TO_DATE(SUBSTRING(id, 1, 8), '%d%m%Y')) = 2014 AND 
      MONTH(STR_TO_DATE(SUBSTRING(id, 1, 8), '%d%m%Y')) = 1

你可以試試這個

select userid,SUBSTRING(id, 3, 2) ,SUBSTRING(id, 5, 4),hours_a,hours_b, hours_c
FROM weird_table 
WHERE userid = 9 AND SUBSTRING('010120149', 3, 6) = '012014';

並且檢索的行小時值可以簡單地相加。

通過使用服務器的CPU,對我來說,PHP也在服務器上運行,因此我將通過PHP腳本來完成工作。

首先將ID拆分為MM,DD,YYYY,然后使用其填充Sum-Array。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM