【问题标题】:Get max ID and min ID from specific column in MySQL php从 MySQL php 中的特定列获取最大 ID 和最小 ID
【发布时间】:2016-04-14 18:20:26
【问题描述】:

我是 php 的新手,现在正尝试将数据从 MySQL 检索到 android。

这是我的work_details

RetrieveTotalHours 函数中,我想将 min id time-inma​​x id time-outMySQL 检索到 android通过php,最后使用下面的代码获取总小时数。

假设 ID 是 3 ,所以我想得到 timeIn 哪里id=3timeOut哪里id=25。这是我迄今为止尝试过的。

  public void RetrieveTotalHours( final String ID) // ID(twd)=3
    {
        class GetHours extends AsyncTask<Void,Void,String> {
            ProgressDialog loading;
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                loading = ProgressDialog.show(getActivity(),"Fetching...","Wait...",false,false);
            }

            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                loading.dismiss();
                showHours(s);
            }

            @Override
            protected String doInBackground(Void... params) {
                RequestHandler rh = new RequestHandler();
                String s = rh.sendGetRequestParam(Configs.RETRIEVE_HOURS,ID);
                return s;
            }
        }
        GetHours ge = new GetHours();
        ge.execute();

    }
    private void showHours(String json) {
        try {
            JSONObject jsonObject = new JSONObject(json);
            JSONArray result = jsonObject.getJSONArray(Configs.TAG_JSON_ARRAY);
            JSONObject c = result.getJSONObject(0);
            String MiNtimeIn = c.getString(Configs.TAG_IN); 
            String MaXtimeOut=c.getString(Configs.TAG_OUT);

            long difference = 0;
            if (MiNtimeIn > MaXtimeOut) {
            difference = (MaXtimeOut + (24 * 60) - MiNtimeIn) - (1 * 60);
            minutes = (int) (difference % 60);
            hours = (int) ((difference / 60) % (24 * 60));
            totalHours.setText(("Total hours : " + hours + ":" + minutes));

           } else {
            // .....
          }

            total.setText(hours);

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

Retrieve_hours.php

<?php
  define('HOST','127.0.0.1:3307');
  define('USER','root');
  define('PASS','');
  define('DB','androiddb');

  $con = mysqli_connect(HOST,USER,PASS,DB) or die('unable to connect');

  $twd= $_GET['id'];

 $sql = "select timeIn, timeOut from work_details WHERE twd = '".$twd."' AND id IN
 (SELECT MIN(id) FROM work_details WHERE twd ='".$twd."' UNION SELECT MAX(id) FROM work_details WHERE twd='".$twd."')";

  $res = mysqli_query($con,$sql);

  $result=array();


  while($row=mysqli_fetch_array($res)){
      array_push($result,array('id'=>$row[0],'timeIn'=>$row[1],'timeOut'=>$row[2]));
  }

 echo json_encode($res);

mysqli_close($con);

?>

配置

    public static final String TAG_IN="timeIn";
    public static final String TAG_OUT="timeOut";

错误

01-10 19:31:47.355    1298-1298/com.example.project.myapplication W/System.err﹕ org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONObject
01-10 19:31:47.355    1298-1298/com.example.project.myapplication W/System.err﹕ at org.json.JSON.typeMismatch(JSON.java:111)
01-10 19:31:47.355    1298-1298/com.example.project.myapplication W/System.err﹕ at org.json.JSONObject.<init>(JSONObject.java:159)
01-10 19:31:47.355    1298-1298/com.example.project.myapplication W/System.err﹕ at org.json.JSONObject.<init>(JSONObject.java:172)
01-10 19:31:47.355    1298-1298/com.example.project.myapplication W/System.err﹕ at com.example.project.myapplication.GUI.Edit_WorkDetails.showHours(Edit_WorkDetails.java:248)
01-10 19:31:47.355    1298-1298/com.example.project.myapplication W/System.err﹕ at com.example.project.myapplication.GUI.Edit_WorkDetails.access$000(Edit_WorkDetails.java:46)
01-10 19:31:47.355    1298-1298/com.example.project.myapplication W/System.err﹕ at com.example.project.myapplication.GUI.Edit_WorkDetails$1GetHours.onPostExecute(Edit_WorkDetails.java:232)
01-10 19:31:47.355    1298-1298/com.example.project.myapplication W/System.err﹕ at com.example.project.myapplication.GUI.Edit_WorkDetails$1GetHours.onPostExecute(Edit_WorkDetails.java:220)
01-10 19:31:47.355    1298-1298/com.example.project.myapplication W/System.err﹕ at android.os.AsyncTask.finish(AsyncTask.java:632)
01-10 19:31:47.355    1298-1298/com.example.project.myapplication W/System.err﹕ at android.os.AsyncTask.access$600(AsyncTask.java:177)
01-10 19:31:47.355    1298-1298/com.example.project.myapplication W/System.err﹕ at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
01-10 19:31:47.355    1298-1298/com.example.project.myapplication W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102)
01-10 19:31:47.355    1298-1298/com.example.project.myapplication W/System.err﹕ at android.os.Looper.loop(Looper.java:146)
01-10 19:31:47.355    1298-1298/com.example.project.myapplication W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5602)
01-10 19:31:47.360    1298-1298/com.example.project.myapplication W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
01-10 19:31:47.360    1298-1298/com.example.project.myapplication W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515)
01-10 19:31:47.360    1298-1298/com.example.project.myapplication W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
01-10 19:31:47.360    1298-1298/com.example.project.myapplication W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
01-10 19:31:47.360    1298-1298/com.example.project.myapplication W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
01-10 19:31:47.380    1298-1298/com.example.project.myapplication D/AbsListView﹕ Get MotionRecognitionManager

已编辑

 String MiNtimeIn = c.getString(Configs.TAG_IN); 
 String MaXtimeOut=c.getString(Configs.TAG_OUT);

假设 ID(twd) 为 8,我应该在 timeIn 中得到 21:52,在 timeOut 中得到 1:52。 MiNtimeIn 应显示 21:52(id 3),MaXtimeOut 应显示 1:52(id 4)

【问题讨论】:

  • 如果你得到正确的值,你就可以了。
  • @GoudaElalfy 我得到W/System.err﹕ org.json.JSONException: Value &lt;br of type java.lang.String cannot be converted to JSONObject

标签: java php android mysql


【解决方案1】:

替换此部分:

$result=array();
while($row=mysqli_fetch_array($res)){
    array_push($result,array('id'=>$row[0],'timeIn'=>$row[1],'timeOut'=>$row[2]));
}
echo (json_encode(array("result"=>$result)));

与:

echo json_encode($res);

你创建了很多数组,当你在 while 循环中推入数组时,你将数组推入 $result 数组,然后当你回显时,你将所有结果放入另一个数组中。这更复杂。

【讨论】:

    【解决方案2】:

    @John,

    检查我对这个错误的回答:


    问题来了:

    echo json_encode($res);
    

    您正在编码$res 变量。

    $res = mysqli_query($con,$sql);
    

    mysqli_query() 返回一个mysqli_result 对象。

    这是结果集,你不能把encode他们变成JSON

    您需要先将其提取到 PHP 数组中,就像您在循环中所做的那样。

    您没有将该数组用于JSON 编码,因此echo json_encode($res); 不正确,它应该是echo json_encode($result);

    您还可以简化此代码:

    $res = mysqli_query($con,$sql);
    $data=array();
    while($row=mysqli_fetch_array($res)){
        $data[] = $row;
    }
    echo json_encode($data);
    

    此错误是因为您试图将其解析为 JSONObject:

    JSONObject jsonObject = new JSONObject(json);
    

    应该是一个json数组:

    JSONArray jsonArray = new JSONArray(json);
    

    【讨论】:

    猜你喜欢
    • 2016-04-16
    • 2016-04-14
    • 2012-12-24
    • 2019-02-12
    • 1970-01-01
    • 2021-10-27
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多