2013/03/16

MySQL 搜尋組合字串

有時候資料庫某個欄位的存取不只一項資料,可能會以某個自訂的標籤符號來組成多項資料,例如 1,2,3,或者是 a,b,c,那日後該如何取出我們想要的相符和的內容呢,譬如說我想抓出該欄位擁有 1 的內容,或者是擁有 a 的內容。

tbl_test 資料表結構

t_id int primary_key auto increment,
t_name varchar(100),
t_string text,

預先塞了三筆資料

a 1,2,3
b 12,3
c 2,3
include 'main.php';
$chan->dbConnect();

$string = 1; // 今天我們要搜尋出該欄位擁有 1 的資料
$string = '%,'.$string.',%'; // 首先把該搜尋字串使用 %, ,% 包圍

// 將被搜尋的欄位也使用 CONCAT 函式前後加上 ,
// toSql 是我自己的函式,會把 1 變成 '1'
// $sql 最後會變成 SELECT * FROM tbl_test WHERE CONCAT(',', t_string, ',') LIKE '%,1,%' 這樣的結果
// 也就是用 LIKE 的特性對整體欄位做搜尋
$sql = sprintf("SELECT * FROM tbl_test WHERE CONCAT(',', t_string, ',') LIKE %s",
    $chan->toSql($string, 'text'));
$row = $chan->myRow($sql);

if ($row) {
    foreach ($row as $v) {
        echo $v['t_name'].'
'; } } // 最終的結果會找出 a

沒有留言: