我们有一个遗留表Prop
,根据符号的不同,它value
会告诉您要引用PropLong
还是PropShort
表。要清楚是否Prop.value > 0
看向PropShort
其他人PropLong
。
现在,我想基于最终值构建一个动态查询。我不确定该怎么做。我已经有一个查询(也可以对此发表评论),它将把最终值拉回(str_value
但我不知道如何修改它,以便我可以进一步扩展)str_value
。
SELECT *,
IFNULL(PropShort.str, PropLong.str) AS str_value FROM Prop
LEFT JOIN PropShort ON sid=Prop.value
LEFT JOIN PropLong ON lid=-Prop.value
现在WHERE PropShort.str=%s OR PropLong.str=%s
从哪里来?我对OR'ing多个查询特别感兴趣(例如WHERE PropShort.str=%s OR PropLong.str=%s OR behavior="foo"
)
表定义
CREATE TABLE `Prop` (
`propId` int(10) unsigned NOT NULL,
`value` int(11) NOT NULL,
`behavior` varbinary(255) NOT NULL,
KEY `propId` (`propId`),
) ENGINE=InnoDB;
CREATE TABLE `PropLong` (
`lid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`str` blob NOT NULL,
PRIMARY KEY (`lid`)
) ENGINE=InnoDB;
CREATE TABLE `PropShort` (
`sid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`str` varbinary(255) NOT NULL,
PRIMARY KEY (`sid`)
) ENGINE=InnoDB;
这取决于...但可能会
SELECT *,
IFNULL(PropShort.str, PropLong.str) AS str_value
FROM
Prop
LEFT JOIN PropShort
ON sid=Prop.value
AND PropShort.str=%s
LEFT JOIN PropLong
ON lid=-Prop.value
AND PropLong.str=%s
现在,这仍将使您的“ Prop”表成为主要表,但仅基于它们各自的条件而联接到各自的其他表。因此,您可以通过ID设置PropShort,但不匹配.str,但可以通过ID匹配有效的PropLONG,并使用正确的.str来获取所需的内容。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句