diff --git a/models/Parkingquery_model.php b/models/Parkingquery_model.php index 5524bba..dbe930a 100644 --- a/models/Parkingquery_model.php +++ b/models/Parkingquery_model.php @@ -151,18 +151,14 @@ class Parkingquery_model extends CI_Model { $data = array(); $this->db->trans_start(); + + $sql = ''; if ($pksno > 0) // 限制從某一個車位開始指派車位 { - //$sql = "select pksno from pks where status = 'VA' and pksno >= {$pksno} and prioritys != 0 and (book_time is null or book_time <= now()) order by prioritys asc limit 1 for update;"; - - // 2017/04/12 調整為支援找最近 - //$sql_xy = "select posx, posy from pks where pksno = {$pksno}"; - $sql_xy = " - select pks.posx, pks.posy, RIGHT(pks_group_member.group_id, 1 ) as group_idx - from pks - left join pks_group_member on (pks_group_member.pksno = pks.pksno) - left join pks_groups on (pks_groups.group_id = pks_group_member.group_id) - where pks.pksno = {$pksno} AND pks_groups.group_type = {$group_type} + // 取得指定車格座標 + $sql_xy = " SELECT pks.posx, pks.posy, LEFT(pks.pksno, 2) as pksno_idx + FROM pks + WHERE pks.pksno = {$pksno} "; $rows_xy = $this->db->query($sql_xy)->row_array(); @@ -175,7 +171,7 @@ class Parkingquery_model extends CI_Model ABS(cast(pks.pksno as signed) - {$pksno}) + ABS(cast(pks.posx as signed) - {$rows_xy['posx']}) + ABS(cast(pks.posy as signed) - {$rows_xy['posy']}) + - ABS(RIGHT(pks_group_member.group_id, 1 ) - {$rows_xy['group_idx']}) * 1000 + ABS(LEFT(pks.pksno, 2) - {$rows_xy['pksno_idx']}) * 1000 ) AS v from pks left join pks_group_member on (pks_group_member.pksno = pks.pksno) @@ -183,27 +179,25 @@ class Parkingquery_model extends CI_Model where pks.status = 'VA' and prioritys != 0 and (pks.book_time is null or pks.book_time <= now()) and pks_groups.group_type = {$group_type} - order by v asc limit 10 for update; + order by v asc limit 1 for update; "; - - /* - $sql = "select pksno, - ( ABS(cast(pksno as signed) - {$pksno}) + ABS(cast(posx as signed) - {$rows_xy['posx']}) + ABS(cast(posy as signed) - {$rows_xy['posy']}) ) AS v - from pks where status = 'VA' and prioritys != 0 and (book_time is null or book_time <= now()) - order by v asc limit 1 for update;"; - */ - } - else - { - // 依順序 - $sql = "select pksno from pks where status = 'VA' and pksno >= {$pksno} and prioritys != 0 and (book_time is null or book_time <= now()) order by prioritys asc limit 1 for update;"; } - } - else - { - $sql = "select pksno from pks where status = 'VA' and prioritys != 0 and (book_time is null or book_time <= now()) order by prioritys asc limit 1 for update;"; } + // 依順序 + if(empty($sql)) + $sql = "SELECT pks.pksno + FROM pks + LEFT JOIN pks_group_member ON (pks_group_member.pksno = pks.pksno) + LEFT JOIN pks_groups ON (pks_groups.group_id = pks_group_member.group_id) + WHERE pks.status = 'VA' + AND pks.prioritys != 0 + AND (pks.book_time IS NULL OR pks.book_time <= now()) + AND pks_groups.group_type = {$group_type} + ORDER BY pks.prioritys ASC LIMIT 1 FOR UPDATE;"; + + trigger_error(__FUNCTION__ . "..sql: {$sql}.."); + $rows = $this->db->query($sql)->row_array(); if (!empty($rows['pksno'])) { @@ -212,12 +206,13 @@ class Parkingquery_model extends CI_Model $sql = "update pks set book_time = addtime(now(), '00:10:00') where pksno = {$rows['pksno']};"; $this->db->query($sql); - trigger_error(__FUNCTION__ . "[{$pksno}]:" . print_r($rows, true)); + trigger_error(__FUNCTION__ . "[{$pksno}]:" . print_r($data, true). print_r($rows, true)); } else { $data['result']['location_no'] = '0'; $data['result_code'] = 'FAIL'; + trigger_error(__FUNCTION__ . "[{$pksno}]:" . print_r($data, true)); } $this->db->trans_complete(); return $data;