我有一个带单选按钮的表单,它存储我的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
时,将显示一个文本框,以便他们可以自由输入他们的首选数据。请查看此fiddle以查看示例。
我所想到的第一个逻辑是创建一个单独的表来存储用户的输入数据。
other_tb:
other_id | user_id | typed_in |
----------+---------+----------+
1 | 1 | cake |
2 | 3 | pizza |
因此,当我获取数据时,如果php
为if()
(或其他),则使用prefer_id
&#39} 4
条件,如果是,我将使用另一个SELECT
查询来获取other_tb
表中的其他数据。
SELECT typed_in FROM other_tb WHERE user_id = ?
有没有办法在一个查询中完成所有这些?
OR
这是最好的选择,还是在这种情况下有正确或更好的方式?
答案 0 :(得分:0)
试试这个
<body data-ng-app="myApp" data-ng-controller="myController" data-ng-init="init()">
<label>First Name</label>
<input type="text" name="firstname" data-ng-model="empData.firstname" /></br>
<label>Technical Skills</label>
<span ng-repeat="tech in technology">
<input type="checkbox" ng-model="tech.selected" value={{tech.name}} /> {{tech.name}}
</span>
</body>
答案 1 :(得分:0)
如果你正在使用你所描述的第二个表,并且你想保持输出的相同格式,并假设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 = ?
答案 2 :(得分:0)
我可以根据情况练习两种方法:
table2
。因此,在获取数据时,您仍可以使用LEFT JOIN
来获得用户的首选选项,而无需任何其他条件。但是此方法将允许用户查看其他用户添加的选项。table2
添加选项,请在table1
的另一列中存储用户的other
答案(让例如other_option
列)。此方法允许用户仍然自由声明其选项,而无需向table2
添加选项。这里是table1
:
+---------+------+---------+-----------+--------------+
| user_id | name | address | prefer_id | other_option |
+---------+------+---------+-----------+--------------+
我要做的是,如果用户喜欢回答prefer_id
,我将other_option
设为0。因此,您的程序期望如果prefer_id
为0,则您在other_option
中有一个输入。