php - 是 LIKE,但 int 表示应检查的字符串

标签 php sql filter mariadb sql-like

假设我有一个表 (tableA),其中有一列 Kwaliteit,它将包含一个 int 值(0, 1, 2, 3) 表示一些字符串值。

这些字符串值序列化存储在另一个表 (tableB) 中,如下所示:

a:4:{i:0;s:4:"Goed";i:1;s:5:"Matig";i:2;s:6:"Slecht";i:3;s:12:"Afgeschreven";}

这将给出一个像这样的 PHP 数组:

Array
(
    [0] => Goed
    [1] => Matig
    [2] => Slecht
    [3] => Afgeschreven
)

问题是,我想过滤 Afgeschreven。所以我将其插入查询的 LIKE 部分,但这不起作用,因为 int 而不是 string in 表A

如何绕过这个问题?我可以暂时用字符串值更改列值来进行过滤吗?

编辑 这是 tableA (Kist)

的结构
CREATE TABLE IF NOT EXISTS `Kist` (
  `idKist` int(11) NOT NULL AUTO_INCREMENT,
  `idKistType` int(11) NOT NULL,
  `Tag1` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `Tag2` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `VisueelNr` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `Bouwjaar` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `kwaliteit` tinyint(1) NOT NULL,
  `Actief` tinyint(1) NOT NULL,
  PRIMARY KEY (`idKist`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=982 ;

INSERT INTO `Kist` (`idKist`, `idKistType`, `Tag1`, `Tag2`, `VisueelNr`, `Bouwjaar`, `kwaliteit`, `Actief`) VALUES
(1, 1, '0086-1700-0000-0000-0000-371E', '0086-1700-0000-0000-0000-3868', '0', '', 3, 0),
(2, 1, '0086-1700-0000-0000-0000-413F', '0086-1700-0000-0000-0000-409A', '0', '', 0, 1);

tableB (Instellingen)

CREATE TABLE IF NOT EXISTS `Instellingen` (
  `idInstellingen` int(11) NOT NULL AUTO_INCREMENT,
  `Instelling` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `Waarde` longtext COLLATE utf8_unicode_ci,
  PRIMARY KEY (`idInstellingen`),
  UNIQUE KEY `Instelling_UNIQUE` (`Instelling`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=220 ;

INSERT INTO `Instellingen` (`idInstellingen`, `Instelling`, `Waarde`) VALUES
(200, 'kistKwaliteit', 'a:4:{i:0;s:4:"Goed";i:1;s:5:"Matig";i:2;s:6:"Slecht";i:3;s:12:"Afgeschreven";}');

序列化值存储在 Waarde 列中

最佳答案

你所拥有的大概是这样的:

select * from tablea where kwaliteit = 'Afgeschreven';

这是行不通的,因为 kwaliteit 是代码,而不是字符串。你正在寻找的是关于这个:

select * from tablea where kwaliteit =
 (select kwaliteit from tableb where text = 'Afgeschreven');

关于php - 是 LIKE,但 int 表示应检查的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31155776/

相关文章:

php - 我的 codeigniter 查询正确吗?

sql - 为 DATE_SUB 的单元参数使用存储过程参数

mysql - MySQL 查询的等效 MemSQL 查询

Pythonlogging.conf重新加载配置

WordPress excerpt_more 过滤器 Hook 仅在我的博客页面的第一篇文章上不起作用

php - 为什么包含我的凭据的变量没有插入到 PDO 连接中?

PHPExcel 导出到 Codeigniter 循环数据数组中的 excel

angularjs - 按 child 筛选收藏

php - 如何使用数据库中的数组选择mysql

sql - 查询分层查询