小弟現在有個問題想請問一下各位先進
有張 table
table name : projects
projects.code 如下:
11&22
11&22|22&33
92&71|22&92|55&33
我有18組號碼,分別要去找出這欄位裡面有符合的
例如號碼是 11 , 22 , 34
這樣的話只要是 11&22 or 22&34 or 11&34 都符合
「|」 是分隔符號,被它區分的只要有一組符合就可以了
例如:
11&22 : O
22&99 : X
11&22|22&33 : O
92&71|22&92|55&33 : X
我的寫法是這樣:
<?php
//table name : projects
//projects.code 如下:
//11&22
//11&22|22&33
//92&71|22&92|55&33
$aCodes = array(11, 22, 33, 44, 55,
66, 77, 88, 99, 10,
21, 31, 41, 51, 61, 71, 81, 91);
$sRegExp = " `projects.type` like '1' ";
$sql = " (1 = 2) ";
foreach ($aCodes as $iKey1 => $sValue1) {
foreach ($aCodes as $iKey2 => $sValue2) {
if ($iKey1 != $iKey2 ) {
$sql .= " OR ";
$sql .= ' (`projects.code` ' .
' REGEXP "^.*' . $sValue1 . '&' . $sValue2 . '.*$") ';
}
}
}
$sRegExp = ' AND( '.$sql.' )';
$this->oDB->query( "UPDATE `projects`
SET `updatetime`='".date("Y-m-d H:i:s")
."' WHERE $sRegExp " );
?>
mysql:
UPDATE `projects`
SET `updatetime`='".date("Y-m-d H:i:s")
WHERE `projects.type` like '1'
AND ( 1=2
OR REGEXP "^.*11&22*$"
OR REGEXP "^.*11&33*$"
OR REGEXP "^.*11&44*$"
...
OR REGEXP "^.*22&11*$"
OR REGEXP "^.*22&33*$"
OR REGEXP "^.*22&44*$"
...
OR REGEXP "^.*33&11*$"
OR REGEXP "^.*33&22*$"
OR REGEXP "^.*33&44*$"
...
< 重覆 18*17 次>
)
效果是沒錯,但是一直覺得這樣寫很醜
而且之後可能會有 三組(11&22&33) 四組(11&22&33&44).. 的寫法
可是這樣就要用三個 loop 四個 loop 下去跑了
sql 醜就算了 php 也很沒效率的感覺
不知道有哪位先進可以指導一二
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.125.155.100
※ 文章網址: https://www.ptt.cc/bbs/PHP/M.1468830790.A.C86.html
→
07/18 16:56, , 1F
07/18 16:56, 1F
→
07/18 16:57, , 2F
07/18 16:57, 2F
→
07/18 16:58, , 3F
07/18 16:58, 3F
→
07/18 17:36, , 4F
07/18 17:36, 4F
→
07/18 17:37, , 5F
07/18 17:37, 5F
→
07/18 17:38, , 6F
07/18 17:38, 6F
※ 編輯: kiey (59.125.155.100), 07/18/2016 17:40:42
→
07/18 17:40, , 7F
07/18 17:40, 7F
推
07/18 18:02, , 8F
07/18 18:02, 8F
推
07/19 00:38, , 9F
07/19 00:38, 9F
→
07/19 00:39, , 10F
07/19 00:39, 10F
→
07/19 00:40, , 11F
07/19 00:40, 11F
→
07/19 00:44, , 12F
07/19 00:44, 12F
→
07/19 00:46, , 13F
07/19 00:46, 13F
推
07/19 01:35, , 14F
07/19 01:35, 14F
→
07/19 08:47, , 15F
07/19 08:47, 15F
→
07/19 10:08, , 16F
07/19 10:08, 16F
→
07/19 10:09, , 17F
07/19 10:09, 17F
→
07/19 10:10, , 18F
07/19 10:10, 18F