从MySQL php中的特定列获取最大ID和最小ID

时间:2016-01-10 11:01:49

标签: java php android mysql

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

这是我的 work_details

enter image description here

RetrieveTotalHours 功能中,我想从php检索 min id time-in max id time-out 通过id=3到android,最后使用下面的代码来获取总小时数。

假设ID为3,所以我想得到 timeIn ,其中id=25 timeOut ,其中 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(); } } 。这是我到目前为止所尝试过的。

<?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);

?>

Retrieve_hours.php

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

CONFIGS

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);

被修改

enter image description here

[AnyLanguage: SortedList<String>]

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

2 个答案:

答案 0 :(得分:2)

替换此部分:

$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数组中推送数组时,然后在你回显时将所有结果放在另一个数组中。这更复杂。

答案 1 :(得分:1)

@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);