簡體   English   中英

將“其他”數據存儲到 MySQL 數據庫中的最佳方式

[英]Best way to store "Other" data into MySQL database

我有一個帶有單選按鈕的表單,它在我的 MySQL 數據庫中存儲值(即 ID)以及來自用戶的必要信息。

INSERT INTO table (user_id, name, address, prefer_id) VALUES ('', ?, ?, ?);

因此,當我嘗試獲取數據時,我使用LEFT JOINtable2獲取必要的描述:

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_id4 (或其他),我將使用phpif()條件,如果是,我將使用另一個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 = ?

根據情況,我可以練習兩種方法:

  1. 允許用戶添加更多選項,以便他們的答案仍被索引到table2 所以在獲取數據時,你仍然可以使用LEFT JOIN來獲取用戶的首選選項,而無需任何其他條件。 但是這種方法將允許用戶查看其他用戶添加的選項。
  2. 如果選項是“固定的”並且只有管理員被允許向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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM