[英]Best way to store "Other" data into MySQL database
我有一個帶有單選按鈕的表單,它在我的 MySQL 數據庫中存儲值(即 ID)以及來自用戶的必要信息。
INSERT INTO table (user_id, name, address, prefer_id) VALUES ('', ?, ?, ?);
因此,當我嘗試獲取數據時,我使用LEFT JOIN
從table2
獲取必要的描述:
SELECT a.name, a.address, b.prefer_desc FROM table a
LEFT JOIN table2 b ON a.prefer_id = b.prefer_id
WHERE a.user_id = ?
但是我創建了另一個選項,以防用戶喜歡的選項不在列表中。 當用戶在單選按鈕列表中選擇Other
時,將出現一個文本框,以便他們可以自由輸入他們喜歡的數據。 檢查此小提琴以查看示例。
我想到的第一個邏輯是創建一個單獨的表來存儲用戶輸入的數據。
其他_tb:
other_id | user_id | typed_in |
----------+---------+----------+
1 | 1 | cake |
2 | 3 | pizza |
因此,當我獲取數據時,如果prefer_id
為4
(或其他),我將使用php
的if()
條件,如果是,我將使用另一個SELECT
查詢來獲取other_tb
表中的其他數據。
SELECT typed_in FROM other_tb WHERE user_id = ?
有沒有辦法在一個查詢中完成所有這些?
或者
這是最好的選擇,還是在這種情況下有正確或更好的方法?
嘗試這個
SELECT
a.name,
a.address,
IF(a.prefer_id=4,(SELECT typed_in FROM other_tb WHERE user_id = a.user_id),b.prefer_desc) as prefer_desc
FROM table a
LEFT JOIN table2 b
ON a.prefer_id = b.prefer_id
WHERE a.user_id = ?
如果您按照您的描述使用第二個表,並且您希望保持相同的輸出格式並假設other_tb
中的記錄對於每個user_id
都是唯一的,您可以使用以下內容:
SELECT a.name, a.address,
CASE
WHERE a.prefer_id = 4 THEN c.typed_in
ELSE b.prefer_desc
END CASE AS prefer_desc
FROM table a
LEFT JOIN table2 b ON a.prefer_id = b.prefer_id
LEFT JOIN other_tb c ON a.user_id = c.user_id
WHERE a.user_id = ?
我覺得這也可以寫成:
SELECT a.name, a.address,
CASE a.prefer_id
WHERE 4 THEN c.typed_in
ELSE b.prefer_desc
END CASE AS prefer_desc
FROM table a
LEFT JOIN table2 b ON a.prefer_id = b.prefer_id
LEFT JOIN other_tb c ON a.user_id = c.user_id
WHERE a.user_id = ?
根據情況,我可以練習兩種方法:
table2
。 所以在獲取數據時,你仍然可以使用LEFT JOIN
來獲取用戶的首選選項,而無需任何其他條件。 但是這種方法將允許用戶查看其他用戶添加的選項。table2
添加選項,則在table1
有另一列,它存儲用戶的other
答案(比如other_option
列)。 此方法允許用戶仍然自由地聲明他們的選項,而無需向table2
添加選項。 這是表table1
:
+---------+------+---------+-----------+--------------+
| user_id | name | address | prefer_id | other_option |
+---------+------+---------+-----------+--------------+
我做的是我把0到prefer_id
如果用戶更喜歡回答other_option
。 所以,你的程序要求,如果prefer_id
是0,你必須在輸入other_option
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.