Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL元相关查询_Mysql_Sql - Fatal编程技术网

Mysql SQL元相关查询

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键所在的位置

您好,我在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键所在的位置[隐藏]!=值

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
    )