我正在创建新的子弹。假设我的子弹变量是$slug = 'About-Us'

我有一个表,其中有一个名为slug的字段。子弹柱的值可以是这样的:


'关于我们'
“关于我们2”,
“关于我们3”,
“关于我们5”


如果有重复的子弹,我们将在最后一个破折号后附加一个数值。


“关于我们2”,
“关于我们3”,
“关于我们5”


插入新数据时,我们需要检查是否以准确的形式存在一个段,或者最后一个“-”破折号后面的部分是数字形式。

我想通过使用此查询来检查

"SELECT COUNT(*) FROM table WHERE SLUG LIKE 'About-Us%'"


上面的查询有问题。如果出现像"About-Uses"这样的段,则它返回计数1。我们需要检查的是最后一个破折号后的部分是否为数字。

同样,必须认为像"About-Us-2-Know"这样的块与'About-Us'不同,而必须将'About-Us-2''About-us-3'视为'About-Us'的多次出现

编辑:

这不是重复的。它不仅涉及仅以最后一个字符作为数字进行检查。这是关于检查最后一个破折号之前的字符串是否完全匹配以及最后一个破折号之后的字符串是否是数字。

最佳答案

这是我仅使用MySql解决的方法。可能需要根据您的需要进行调整,但是使用SUBSTRING_INDEX是我的主要解决方案。

/*
'About-Us'
'About-Us-2',
'About-Us-3',
'About-Us-5'
*/

DROP TABLE IF EXISTS `bleach`;
DROP TABLE IF EXISTS `bleach2`;

CREATE TABLE bleach (slug VARCHAR (255) NOT NULL);

INSERT INTO bleach SELECT 'About-Us';
INSERT INTO bleach SELECT 'About-Us-2';
INSERT INTO bleach SELECT 'About-Us-3';
INSERT INTO bleach SELECT 'About-Us-5';
INSERT INTO bleach SELECT 'About-Us-6-extra';
INSERT INTO bleach SELECT 'About-Us-NoMatch';


-- About us match
CREATE TABLE bleach2
SELECT slug, SUBSTRING_INDEX(slug,'-',2) AS about_us,
SUBSTRING_INDEX(slug,'-',-1) AS  first_numeric,
SUBSTRING_INDEX(SUBSTRING_INDEX(slug,'-',-2),'-',1) AS second_numeric
FROM bleach;

SELECT * FROM bleach2;

-- All but About-Us-NoMatch should return
SELECT * FROM bleach2 WHERE about_us='About-Us' AND
(first_numeric IN ('1','2','3','4','5','6','7','8','9') OR second_numeric IN ('1','2','3','4','5','6','7','8','9'))
OR second_numeric='About';

关于mysql - 如何检查Mysql数据库中是否存在准确的子弹(单次出现或多次出现)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51442728/

10-13 06:48