iT邦幫忙

0

MYSQL 查詢有辦法一個欄位多個值嗎?

大家好~我一個新手不知道這是不是很簡單的問題
GOOGLE很久還找不到答案,所以上來發問一下QQ

我想做一個php網頁 利用select表單連結MYSQL
當我選了index1這個選項的時候
我希望能出現資料表2 JOE、ANNY、ZOE這三個資料
請問這是有辦法實現的嗎?
還是必須分開建立資料呢?

資料表1
欄位A    欄位B
index1    1,2,3
index2    2,3
index3    4

資料表2
欄位A    欄位B
1      JOE
2      ANNY
3      ZOE
4      AMY

froce iT邦高手 1 級 ‧ 2018-02-27 19:53:01 檢舉
正規化才是正解...
這樣設計之後系統一大,你會遇到的問題會更多更難解。
0
gn00044255
iT邦新手 5 級 ‧ 2018-02-27 08:04:51
最佳解答

基本上資料表1的資料,未正規劃無法實現你要的資料:
資料表一應改成
欄位A 欄位B
index1 1
index1 2
index1 3
index2 2
index2 3
index3 4

SQL語法:Select 資料表2.欄位B From 資料表1
Where 資料表1.欄位B=資料表2.欄位A
And 資料表1.欄位A='index1'

0
暐翰
iT邦大師 5 級 ‧ 2018-02-27 08:26:27

問:

請問這是有辦法實現的嗎?
還是必須分開建立資料呢?

答:

可以實現
下面是我照你的需求寫的範例,但要注意資料量一大,就會有效能問題
到時候需要調教

--------------建立表格----------------
CREATE TABLE 資料表1 (
  欄位A VARCHAR(20),
  欄位B VARCHAR(20));

INSERT INTO 資料表1 VALUES
('index1', '1,2,3'),
('index2', '2,3'),
('index3', '4');

CREATE TABLE 資料表2 (
  欄位A VARCHAR(20),
  欄位B VARCHAR(20));

INSERT INTO 資料表2 VALUES
('1', 'JOE'),
('2', 'ANNY'),
('3', 'ZOE'),
('4', 'AMY');

CREATE TABLE numbers (
  n INT PRIMARY KEY);

INSERT INTO numbers VALUES (1),(2),(3),(4),(5),(6);

--------------測試結果----------------
select T200.欄位A,T100.欄位A,T100.欄位B
from 資料表2 T100
left join (
  SELECT
    資料表1.欄位A,
    SUBSTRING_INDEX(SUBSTRING_INDEX(資料表1.欄位B, ',', numbers.n), ',', -1) 欄位B
  FROM numbers 
  INNER JOIN 資料表1 ON CHAR_LENGTH(資料表1.欄位B)
       -CHAR_LENGTH(REPLACE(資料表1.欄位B, ',', ''))>=numbers.n-1
) T200 on T100.欄位A = T200.欄位B

0
aeolus0829
iT邦研究生 4 級 ‧ 2018-02-27 09:15:41

建議你去找 '關連式資料庫' 和 'sql' 相關的書來看,一般教 mysql 的書應該就可以了

sql 要特別看 join 那個章節

0
純真的人
iT邦高手 3 級 ‧ 2018-02-27 12:02:29

恩...我這邊沒mysql資料庫可以試

但我印象mysql是可以接受這樣的語法..(MSSQL要用CharIndex方式)

select * from 資料表2
where 資料表2.欄位A in(select 資料表1.欄位B from 資料表1 where 資料表1.欄位A = 'index1')

你可以試試...0.0

我要發表回答

立即登入回答