Mysql SQL元相关查询
您好,我在mysql中有两个表,分别是table post和table post\u meta 我想根据post_元键/值数据查询post表。 示例中的第一个查询with=statment正在工作,第二个查询with!=状态不工作。有什么帮助吗 如何排除带有postETA键[hide]=value['1']的帖子? 这里是预期的结果 范例 //显示post,其中POSTETA键[hide]=value 2行Mysql SQL元相关查询,mysql,sql,Mysql,Sql,您好,我在mysql中有两个表,分别是table post和table post\u meta 我想根据post_元键/值数据查询post表。 示例中的第一个查询with=statment正在工作,第二个查询with!=状态不工作。有什么帮助吗 如何排除带有postETA键[hide]=value['1']的帖子? 这里是预期的结果 范例 //显示post,其中POSTETA键[hide]=value 2行 1测试后1 3 1隐藏1 3测试后3 4 3隐藏1 //显示Posteta键所在的位置
1测试后1 3 1隐藏1 3测试后3 4 3隐藏1 //显示Posteta键所在的位置[隐藏]!=值 0行 //为什么??此查询必须返回post 2 数据库模式
----table post
CREATE TABLE `post` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `post` VALUES ('1', 'Post test 1');
INSERT INTO `post` VALUES ('2', 'Post test 2');
INSERT INTO `post` VALUES ('3', 'Post test 3');
----table post_meta
CREATE TABLE `post_meta` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`postid` int(11) DEFAULT NULL,
`key` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`value` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `post_meta` VALUES ('1', '1', 'name', 'leone');
INSERT INTO `post_meta` VALUES ('2', '2', 'name', 'mario');
INSERT INTO `post_meta` VALUES ('3', '1', 'hide', '1');
INSERT INTO `post_meta` VALUES ('4', '3', 'hide', '1');
由于该条件,第二个查询不起作用
mt1.`key` = 'hide'
仔细查看查询
SELECT
*
FROM
post AS mt0
INNER JOIN post_meta AS mt1 ON mt0.id = mt1.postid
WHERE
(
mt1.`key` = 'hide'
AND CAST(mt1.`value` AS CHAR) != 1
)
你有一个条件
mt1.`key` = 'hide'
那么你正在使用
AND CAST(mt1.`value` AS CHAR) != 1
现在,在post_meta
表检查中,没有包含
key = hide and value != '1'
因此,条件失败,结果为0
这是你提供的
INSERT INTO `post_meta` VALUES ('1', '1', 'name', 'leone');
INSERT INTO `post_meta` VALUES ('2', '2', 'name', 'mario');
INSERT INTO `post_meta` VALUES ('3', '1', 'hide', '1');
INSERT INTO `post_meta` VALUES ('4', '3', 'hide', '1');
根据问题中提供的更新,您可以获得以下结果:
SELECT *
FROM
post AS mt0
INNER JOIN post_meta mt1
ON mt0.id = mt1.postid
AND mt0.id NOT IN (
select postid from post_meta where `key` = 'hide' AND CAST(`value` AS CHAR) = 1
);
由于该条件,第二个查询不起作用
SELECT
*
FROM
post AS mt0
INNER JOIN post_meta AS mt1 ON mt0.id = mt1.postid
WHERE
(
mt1.`key` = 'hide'
AND CAST(mt1.`value` AS CHAR) = 1
)
SELECT
*
FROM
post AS mt0
INNER JOIN post_meta AS mt1 ON mt0.id = mt1.postid
WHERE
(
mt1.`key` = 'hide'
AND CAST(mt1.`value` AS CHAR) != 1
)
mt1.`key` = 'hide'
仔细查看查询
SELECT
*
FROM
post AS mt0
INNER JOIN post_meta AS mt1 ON mt0.id = mt1.postid
WHERE
(
mt1.`key` = 'hide'
AND CAST(mt1.`value` AS CHAR) != 1
)
你有一个条件
mt1.`key` = 'hide'
那么你正在使用
AND CAST(mt1.`value` AS CHAR) != 1
现在,在post_meta
表检查中,没有包含
key = hide and value != '1'
因此,条件失败,结果为0
这是你提供的
INSERT INTO `post_meta` VALUES ('1', '1', 'name', 'leone');
INSERT INTO `post_meta` VALUES ('2', '2', 'name', 'mario');
INSERT INTO `post_meta` VALUES ('3', '1', 'hide', '1');
INSERT INTO `post_meta` VALUES ('4', '3', 'hide', '1');
根据问题中提供的更新,您可以获得以下结果:
SELECT *
FROM
post AS mt0
INNER JOIN post_meta mt1
ON mt0.id = mt1.postid
AND mt0.id NOT IN (
select postid from post_meta where `key` = 'hide' AND CAST(`value` AS CHAR) = 1
);
由于该条件,第二个查询不起作用
SELECT
*
FROM
post AS mt0
INNER JOIN post_meta AS mt1 ON mt0.id = mt1.postid
WHERE
(
mt1.`key` = 'hide'
AND CAST(mt1.`value` AS CHAR) = 1
)
SELECT
*
FROM
post AS mt0
INNER JOIN post_meta AS mt1 ON mt0.id = mt1.postid
WHERE
(
mt1.`key` = 'hide'
AND CAST(mt1.`value` AS CHAR) != 1
)
mt1.`key` = 'hide'
仔细查看查询
SELECT
*
FROM
post AS mt0
INNER JOIN post_meta AS mt1 ON mt0.id = mt1.postid
WHERE
(
mt1.`key` = 'hide'
AND CAST(mt1.`value` AS CHAR) != 1
)
你有一个条件
mt1.`key` = 'hide'
那么你正在使用
AND CAST(mt1.`value` AS CHAR) != 1
现在,在post_meta
表检查中,没有包含
key = hide and value != '1'
因此,条件失败,结果为0
这是你提供的
INSERT INTO `post_meta` VALUES ('1', '1', 'name', 'leone');
INSERT INTO `post_meta` VALUES ('2', '2', 'name', 'mario');
INSERT INTO `post_meta` VALUES ('3', '1', 'hide', '1');
INSERT INTO `post_meta` VALUES ('4', '3', 'hide', '1');
根据问题中提供的更新,您可以获得以下结果:
SELECT *
FROM
post AS mt0
INNER JOIN post_meta mt1
ON mt0.id = mt1.postid
AND mt0.id NOT IN (
select postid from post_meta where `key` = 'hide' AND CAST(`value` AS CHAR) = 1
);
由于该条件,第二个查询不起作用
SELECT
*
FROM
post AS mt0
INNER JOIN post_meta AS mt1 ON mt0.id = mt1.postid
WHERE
(
mt1.`key` = 'hide'
AND CAST(mt1.`value` AS CHAR) = 1
)
SELECT
*
FROM
post AS mt0
INNER JOIN post_meta AS mt1 ON mt0.id = mt1.postid
WHERE
(
mt1.`key` = 'hide'
AND CAST(mt1.`value` AS CHAR) != 1
)
mt1.`key` = 'hide'
仔细查看查询
SELECT
*
FROM
post AS mt0
INNER JOIN post_meta AS mt1 ON mt0.id = mt1.postid
WHERE
(
mt1.`key` = 'hide'
AND CAST(mt1.`value` AS CHAR) != 1
)
你有一个条件
mt1.`key` = 'hide'
那么你正在使用
AND CAST(mt1.`value` AS CHAR) != 1
现在,在post_meta
表检查中,没有包含
key = hide and value != '1'
因此,条件失败,结果为0
这是你提供的
INSERT INTO `post_meta` VALUES ('1', '1', 'name', 'leone');
INSERT INTO `post_meta` VALUES ('2', '2', 'name', 'mario');
INSERT INTO `post_meta` VALUES ('3', '1', 'hide', '1');
INSERT INTO `post_meta` VALUES ('4', '3', 'hide', '1');
根据问题中提供的更新,您可以获得以下结果:
SELECT *
FROM
post AS mt0
INNER JOIN post_meta mt1
ON mt0.id = mt1.postid
AND mt0.id NOT IN (
select postid from post_meta where `key` = 'hide' AND CAST(`value` AS CHAR) = 1
);
谢谢阿比克的回答。如何排除Posteta hide=1的帖子?欢迎!我没有得到你能在问题中添加你期望的结果吗。这将使我更容易将其可视化。不,我还想排除并用id 1发布此帖子的原因。key[hide]=1谢谢您的回答。如何排除Posteta hide=1的帖子?欢迎!我没有得到你能在问题中添加你期望的结果吗。这将使我更容易将其可视化。不,我还想排除并用id 1发布此帖子的原因。key[hide]=1谢谢您的回答。如何排除Posteta hide=1的帖子?欢迎!我没有得到你能在问题中添加你期望的结果吗。这将使我更容易将其可视化。不,我还想排除并用id 1发布此帖子的原因。key[hide]=1谢谢您的回答。如何排除Posteta hide=1的帖子?欢迎!我没有得到你能在问题中添加你期望的结果吗。这将使我更容易将其可视化。不,我还想排除并用id 1发布此帖子的原因。key[hide]=1
SELECT
*
FROM
post AS mt0
INNER JOIN post_meta AS mt1 ON mt0.id = mt1.postid
WHERE
(
mt1.`key` = 'hide'
AND CAST(mt1.`value` AS CHAR) = 1
)
SELECT
*
FROM
post AS mt0
INNER JOIN post_meta AS mt1 ON mt0.id = mt1.postid
WHERE
(
mt1.`key` = 'hide'
AND CAST(mt1.`value` AS CHAR) != 1
)