我想通过询问commentId
和type = x
来获取target = x
,
(这是一个例子),表的结构应如下所示:
+-----------+-------+--------+
| commentId | type | target |
+-----------+-------+--------+
| 1 | post | 2 |
| 2 | post | 8 |
| 3 | video | 6 |
+-----------+-------+--------+
在这种情况下,我可以使用此查询来获取commentId
:
SELECT `commentId` FROM `comment_datas` WHERE type = 'post' AND target = '2'
但这是表的真实结构(使用键值设计):
+-----------+--------+-------+
| commentId | name | value |
+-----------+--------+-------+
| 1 | type | post |
| 1 | target | 2 |
| 2 | type | post |
| 2 | target | 8 |
| 3 | type | post |
| 3 | target | 6 |
+-----------+--------+-------+
现在我不知道如何通过我上面写的查询得到commentId
,有什么想法吗?
答案 0 :(得分:5)
commentId
分组。然后,您可以使用您想要的条件过滤那些至少有一条记录的组
SELECT commentId
FROM comment_datas
GROUP BY commentId
HAVING sum(name = 'type' and value = 'post') > 0
AND sum(name = 'target' and value = '2') > 0
答案 1 :(得分:3)
直到@ juergen-d修正了他的错字:这是更正的版本:
sum
<强>解释强>
name = type
接受除列名之外的聚合表达式,因此我们的想法是将条目与value = post
和sum
相加
通过使group by
大于0,select只返回满足聚合表达式的target
行 - $(document).ready(function(){
$('#signup_form').submit(function(e){
e.preventDefault();
$.ajax({
url:'form_process.php',
type:'POST',
data: $('#signup_form').serialize(),
success:function(result){
alert(result);
}
});
});
});
也是如此。
答案 2 :(得分:1)
您需要使用类型或其他方式的子选择对值编号进行选择。
像
这样的东西SELECT commentId FROM comment_datas
WHERE name="type" AND value="post"
AND commentId IN (
SELECT commentId FROM comment_datas WHERE name="target" AND value=2
);
但严重的是,如果你离开这样的架构,你会更频繁地遇到这样的问题。你基本上有两行而不是一行。
而不是&#34; name&#34;和&#34;价值&#34;更好地使用实际名称和值作为列名称和值。所以删除&#34; name&#34;和&#34;值&#34;,并添加&#34;键入&#34;和&#34;目标&#34;作为列。这样您就没有双重条目,您可以使ID唯一。您当前的架构将键值系统置于键值系统之上。
答案 3 :(得分:0)
用户,您将获得两条记录
ofstream fout2("int_data", ios::binary);
const int a = 2;
fout2.write(reinterpret_cast<const char*>(&a), sizeof(a));
fout2.close();
int b = 0;
ifstream fin2("int_data", ios::binary);
if(!fin2.read(reinterpret_cast<char*>(&b), sizeof(b))) {
cout << "fail() reading" << endl;
}
cout << b << endl;;
答案 4 :(得分:0)
试试这个,
SELECT
`commentId`
FROM
`comment_datas`
WHERE
(`name` = 'type' AND `value` = 'post') OR
(`name` = 'target' AND `value` = '2')
GROUP BY
`commentId`