如果我今天有ㄧ個部門欄位長這樣
│ id│ depID│
─────────────────
│ 1│ A,A1,B,D1│
─────────────────
│ 2│ A,C,D│
然後我在網頁篩選器 選到其中一個部門
例如我選D 只要找到id是2的
select id from table depID = 'D'
// 目前是這樣寫 這樣就都抓不到
select id from table depID like '%D%'
//這樣又會把欄位內沒有D 但是有D1或D2的下層部門抓出來 抓到 id是1跟2的
如果要在SQL處理 where要怎甚麼下才能出來
select * from depID WHERE 欄位名稱 like '%D%'
建議你先Google一下SQL語法...
然後建議不要用 * , 最好把所有欄位列出來,
用 * 可能會大大降低程式效率.(執行速度)
可是這樣 會把欄位沒有存 D 但是有存D1等其他的 開頭是D的抓出來
如果你有明確要找的當然是用 = 啊,
LIKE 是模糊搜尋.
select * from depID WHERE 欄位名稱 = 'D'
還是建議你先Google一下SQL語法...
我現在是一個部門欄位 可能存了3 4 個部門的代碼
我要篩選的時候只要找其中一個代碼
用like會把 這個部門的下層部門也一起抓到
用 = 又因為欄位內存的不是一個部門 而是多個 會抓不出來
我現在想到是把資料抓出來 再用php去整理 我想問看看有沒有辦法在SQL 處理就好了
你把資料表結構列出來吧,
或是方便的話將欄位和資料SHOW出來說明,
會比較知道你的需求.
柯柯,
這樣的資料庫設計方式,
基本上就是創造技術債 XD
FIND_IN_SET()
我主文有更新 我欄位存的樣子了 他不是部門的table 他是其他的table 去存 他負責的部門代碼
一般來說可能會這樣設計
id | depGroup | depId |
---|---|---|
1 | 1 | A |
2 | 1 | A1 |
3 | 1 | B |
4 | 1 | D1 |
5 | 2 | A |
6 | 2 | C |
7 | 2 | D |
這樣是不是好處理多了?
id | depName | parentDepId | depNameFull |
---|---|---|---|
1 | D | 0 | 研發部 |
2 | D1 | 1 | 研發部測試組 |
3 | D2 | 1 | 研發部開發組 |
4 | A | 0 | 總管理處 |
5 | B | 0 | 業務部 |
6 | C | 0 | 客服部 |
7 | A1 | 4 | 總管理處人事部 |
8 | B1 | 5 | 業務部業務一課 |
我個人是比較喜歡類似這樣的結構,可以直接透過depName搜尋取得指定部門,也可以用parentDepId取得上一層的部門為何。
例如 D1的parentDepId 為 1,對應到 id為 1的 D,
可以得知,D1 為 D的子部門,不用存成D,D1,D2這樣...
ccutmis
就是遞迴的模式就對了.
select * from depTable
WHERE inStr(depID + ',', 'D,') > 0