У меня есть база данных Microsoft Access
Таблица CHECKTIME
USERID CHEKTIME
1 2015-06-21 07:34:00
1 2015-06-21 07:50:00
1 2015-06-21 16:00:00
1 2015-06-21 16:48:00
2 2015-06-21 07:08:00
2 2015-06-21 13:48:00
2 2015-06-21 17:08:00
3 ....................
Я хочу перенести данные в MySQL запрос с результатами:
userId colDate colIn colOut
1 2015-06-21 07:34:00 16:48:00
2 2015-06-21 07:08:00 17:08:00
3 .......... ........ ........
пожалуйста, помогите мне
этот запрос заставляет меня застрять в финальном тесте
почему данные не могут быть вставлены в PHPMyAdmin? или MS Access не может объявить MIN и MAX запрос? Как насчет этой функции и запроса:
public function getPresensi(){
$dbName = $_SERVER['DOCUMENT_ROOT']."/presensi-app/assets/database/upj.mdb";
$user = "";
$password = "";
$conn = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=$dbName", $user, $password);
$qry = "SELECT USERID as id, CHECKTIME as check, min(CHECKTIME) as masuk, max(CHECKTIME) as keluar FROM CHECKINOUT group by USERID,date(CHECKTIME)";
$result = odbc_exec($conn,$qry);
while ($data[] = odbc_fetch_array($result));
odbc_free_result($result);
odbc_close($conn);
$tbl = 'tb_kehadiran';
$db_mysql = $this->load->database('default',TRUE);
$db_mysql->trans_start();
$db_mysql->truncate($tbl);
foreach($data as $k => $v){
$data_mysql = array(
'colUserID' => $v['id'],
'colDate' => $v['check'],
'colJamMasuk' => $v['masuk'],
'colJamKeluar' => $v['keluar'],
);
if($data_mysql != null){
$db_mysql->insert($tbl, $data_mysql);
}
}
$db_mysql->trans_complete();
$db_mysql->close();
}
Опираясь на ваш комментарий, попробуйте это:
SELECT USERID as id, CHEKTIME as date, MIN(CHEKTIME) as colIn, MAX(CHEKTIME) as colOut FROM timetable group by userid,date(chektime)
Когда используешь Максимум а также мин чтобы получить результаты, вы получите только один результат, если вы не используете опцию группировки по. Добавьте группировку по группам по пользователю и дате (таким образом, вы также получите более одной даты для каждого пользователя)
Вы можете проверить это здесь на sqlfiddle
и для изменения формата даты используйте:
date_format(CHEKTIME,'%y-%m-%d') as date
Вы изменили вопрос с тех пор, как я начал
Это краткое изложение проблем, с которыми я сталкивался до сих пор в вашем посте / коде.
Делайте шаг за шагом и начинайте отлаживать то, что у вас есть / нет.
Шаги для решения:
для отображения всех ошибок добавьте следующее сразу после открытия php
ini_set('display_errors', 1);
ini_set('log_errors', 1);
ini_set('error_log', dirname(__FILE__) . '/error_log.txt');
error_reporting(E_ALL);
$error='';
Обновление 2:
Запрос ms-access должен быть:
SELECT Checktime.USERID, DateValue([CHEKTIME]) AS [Day], Min(TimeValue([CHEKTIME])) AS [In], Max(TimeValue([CHEKTIME])) AS Out FROM Checktime GROUP BY Checktime.USERID, DateValue([CHEKTIME]);
Других решений пока нет …