2017-04-25 65 views
0

插入标题到一个表,如果它是一个重复的,我需要一些IT,如 标题 标题2 标题3等 我想我可以通过获得的长度,然后做类似MySQL的使用LEFT或SUBSTRING在WHERE子句递增重复值

"SELECT field FROM tablename WHERE LEFT(field,".$Length.") = '$NewTitle'" 

那么就计算行数和增量来创建新的标题,并将其存储比较那些在表中的新称号。猜猜这不合法。 似乎无法找到一个简单的解决方案。这些条目是通过API发布的,所以我不能轻易要求用户在标题冲突时重命名。

我试图

$NameLength = strlen($DocName); 
    SELECT DocName, count(DocName) FROM Pickup GROUP BY DocName HAVING LEFT(DocName,'$NameLength') = '$DocName'"; 

所以,如果我有三个标题, “标题”; “标题2”; “标题3”,我当时认为我可以做

$D = mysql_fetch_array($Result); 
$RCount = ($D[count(DocName)]) + 1; 
$NewTitle = $DocName.' '.$RCount; 

这工作好了第一次冲突,打造“标题2”,但随后将继续打造“标题2”的后续项目。

围绕这一点还没有完全包围我的想法。我知道这与团体的独特性有关,但如果我有一个“标题”和两个标题2和两个标题3,并且我发送另一个标题,它会将其增加到“标题4”,随后的“标题“也将重新命名为”标题4“。 Group By是不会包含任何没有配偶的东西?

无论如何它不是一个解决方案。

+0

听起来像业务逻辑,不应该在数据库层 – Jens

+0

另一种选择是删除标题的唯一选项。如果标题可以重复,那么允许并找到其他区分方式。 –

+0

我不得不重组太多的事情来做到这一点。这是一种表单,具有历史记录功能,可以拖动之前的条目,用作模板,或者部分填写并在稍后返回。很多是基于用户给记录的标题。该表单有验证。那里没问题。另一方面,API需要处理它。 – RationalRabbit

回答

0
SELECT MAX(CONVERT((TRIM(SUBSTRING(`field`, LOCATE(' ', `name`)))),UNSIGNED)) as count FROM `tablename` WHERE `field` LIKE 'Title%' 
+0

“定位”好!我将不得不做一些这方面的实验,并回到你身边。 – RationalRabbit

+0

无法让这个工作 - 也许部分做我的误解。无论如何,如你所见,我找到了一个更简单的解决方案。当你想使用某个功能时,“拥有”非常棒。但它必须伴随着“分组” – RationalRabbit

+0

我错了。这不是一个解决方案,我仍在寻找。 – RationalRabbit

0

比方说标题是,你要搜索的表的称号。 通过使用查询"SELECT count fieldname FROM tablename fieldname = 'title',您可以获得标题为标题的记录数。 如果计数为0,则按通常方式插入,否则将计数加1并将其附加到标题,然后插入它。

+0

这并不能解决问题,因为“标题2”不会匹配“标题” – RationalRabbit