Mysql MariaDB:在TINYINT列中搜索1的多个联接和where子句无效

Mysql MariaDB:在TINYINT列中搜索1的多个联接和where子句无效,mysql,mariadb,tinyint,Mysql,Mariadb,Tinyint,我有名为person和book和image和bookhit的表格 个人有id,name,书籍有id,owner\u id,info和Image有一列id,owner\u id,url和thumbnail,这是一个小点(在数据库中,一半的行是0s和1s),图像列以两种版本存储书籍封面的图像:大版本和缩略图。表bookhit存储从数据库检索图书的时间,并有一列hits 所以我尝试了多重内部连接来检索最流行书籍的所有缩略图。SQL查询如下所示: SELECT `imagehit`.`hits`, `p

我有名为
person
book
image
bookhit
的表格

个人有
id
name
,书籍有
id
owner\u id
info
和Image有一列
id
owner\u id
url
thumbnail
,这是一个小点(在数据库中,一半的行是
0
s和
1
s),图像列以两种版本存储书籍封面的图像:大版本和缩略图。表
bookhit
存储从数据库检索图书的时间,并有一列
hits

所以我尝试了多重内部连接来检索最流行书籍的所有缩略图。SQL查询如下所示:

SELECT `imagehit`.`hits`, `person`.`name`, `book`.`info`, `image`.`url`, `image`.`thumbnail` FROM `imagehit`
INNER JOIN `person` ON `person`.`id`=`book`.`owner_id`
INNER JOIN `image` ON `image`.`owner_id`=`book`.`id`
ORDER BY `imagehit`.`hits` DESC
WHERE `image`.`thumbnail`=1
LIMIT 10;
SELECT * FROM `image` WHERE `image`.`thumbnail`=0;
即使半行在
图像中有
1
s
缩略图,这也不起作用。如果我更改以下行:

WHERE `image`.`thumbnail`=1

它确实有效。好的,我转到
image
表,做了一个简单的查询,如下所示:

SELECT `imagehit`.`hits`, `person`.`name`, `book`.`info`, `image`.`url`, `image`.`thumbnail` FROM `imagehit`
INNER JOIN `person` ON `person`.`id`=`book`.`owner_id`
INNER JOIN `image` ON `image`.`owner_id`=`book`.`id`
ORDER BY `imagehit`.`hits` DESC
WHERE `image`.`thumbnail`=1
LIMIT 10;
SELECT * FROM `image` WHERE `image`.`thumbnail`=0;
并给了我存储在表中的总计行。但是当我在
phpMyAdmin
中浏览
image
表时,我看到表中存储了
1
s:(

你知道为什么会这样吗?先谢谢你

表定义:

CREATE TABLE `image` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `owner_id` int(11) NOT NULL,
 `thumbnail` tinyint(1) NOT NULL,
 `url` varchar(255) NOT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `image_url` (`url`),
 KEY `image_owner_id` (`owner_id`),
 CONSTRAINT `image_ibfk_1` FOREIGN KEY (`owner_id`) REFERENCES `book` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1450 DEFAULT CHARSET=utf8

CREATE TABLE `person` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(255) NOT NULL,
 `url` varchar(60) NOT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `person_url` (`url`),
) ENGINE=InnoDB AUTO_INCREMENT=6287 DEFAULT CHARSET=utf8

CREATE TABLE `book` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `owner_id` int(11) NOT NULL,
 `book` varchar(3000) NOT NULL,
 `info` varchar(3000) NOT NULL,
 `url` varchar(60) NOT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `book_url` (`url`),
 KEY `book_owner_id` (`owner_id`),
 CONSTRAINT `book_ibfk_1` FOREIGN KEY (`owner_id`) REFERENCES `person` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=725 DEFAULT CHARSET=utf8

CREATE TABLE `imagehit` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `owner_id` int(11) NOT NULL,
 `person_id` int(11) NOT NULL,
 `hits` int(11) NOT NULL,
 PRIMARY KEY (`id`),
 KEY `imagehit_person_id` (`person_id`),
 KEY `imagehit_owner_id` (`owner_id`),
 KEY `hits` (`hits`),
 CONSTRAINT `imagehit_ibfk_1` FOREIGN KEY (`owner_id`) REFERENCES `image` (`id`),
 CONSTRAINT `imagehit_ibfk_2` FOREIGN KEY (`person_id`) REFERENCES `person` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=725 DEFAULT CHARSET=utf8
证明我没有疯:


我使用Peewee插入数据,当我创建行时,如果图像是缩略图,我将其设置为
thumbnail=True
,如果不是
thumbnail=False
。列
thumbnail
是Peewee中的字段
BooleanField

显示您的表定义。@TimBiegeleisen感谢您的关注t、 我编辑了我的问题,定义就在那里。:-)你确定你在表中有
1
s吗?你最初是如何插入数据的?@TimBiegeleisen我编辑了这个问题。我肯定表中有
1
s。我添加了它的图片,并使用peewee添加了行
thumbnail=True
thumbnail=False
。您的观察结果与您认为的数据状态不一致。是的,请检查Python代码,您可能想用这些信息打开一个新问题。