0
你好我有2个表中的mysql表中的帖子和表post_meta 我想根据post_meta键/值数据查询帖子表。 示例中的第一个查询= statment正在工作,第二个查询的!= statment不起作用。任何帮助?SQL元相关查询
如何用postmeta键排除帖子[hide] = value ['1']?
这里的期望结果
例如
//显示交其中postmeta键[隐藏] =值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
)
2行
1后试验1个3 1 1个隐藏
3后测试3 4 3隐藏1个
//显示交其中postmeta键[隐藏]!=值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
)
0行
//为什么呢?这个查询必须返回后2
DB模式
----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');
感谢Abhik的答案。如何用postmeta hide = 1排除帖子? – nikmauro
欢迎您!我不知道你能否在问题中加上你期待的结果。这对我来说更容易想象它。 –
@nikmauro你在看这个吗? http://sqlfiddle.com/#!2/372cb/10 –