【问题标题】:How to remove the last digit of an integer? (PHP)如何删除整数的最后一位? (PHP)
【发布时间】:2011-12-24 10:56:22
【问题描述】:

在 MySQL 查询中删除整数的最后一位数字的最佳方法是什么?

我正在做一个家谱项目。假设father_id

10001

孩子们会是

100011
100012
100013

等等。

我得到了father_ID,我需要能够得到他所有的孩子

我试过了:

SELECT * FROM table WHERE Father_ID LIKE '$F_ID%'

但是没有用。

我发现this post 将整数转换为数组,我认为这可能会有所帮助,但我不知道在那之后我会做什么。

提前致谢!

【问题讨论】:

  • 所以你不想删除整数的最后一位。相反,您希望匹配任何具有固定前缀和可变最后一位数字的整数。
  • 如果父亲(或母亲)有超过 10 个孩子会怎样?

标签: php mysql integer


【解决方案1】:

我不确定这是否是建立家谱的好方法。像你一样使用“父亲 ID”

  • 只允许追踪一位父母 - 并不适合任何严肃的祖先研究
  • 使更改变得困难 - 如果进行更正,您将不得不重新计算整个 ID
  • 有@stefgosselin 提到的问题 - 有 10 多个孩子的家庭怎么办?

我能看到的唯一好处是查询一个祖先的所有后代非常容易,但仅凭这一点在 IMO 上是不值得的。

我会使用正常的自动递增 ID,并为每条记录提供一个 parent 列(当然,也可以是 fathermother,或者考虑到同性父母,parent1parent2 )。该列将包含父记录的 ID。

然后你可以简单地做类似的查询

SELECT * FROM table WHERE father = `530`

查询祖先会变得有点困难,但其他一切都会变得容易得多。

【讨论】:

  • 为了回答我的主要问题,我已经进行了简化,我有一个个人 ID、mother_ID、Father_ID、Family_ID... 等。全部为一排
  • @user 听起来非常复杂。使用父列的方法可能效果更好。
  • 出于各种原因(例如创建视觉效果),我需要拥有所有这些
  • 除此之外,母亲通常是可识别的,父亲并不总是如此......所以为什么要沿着父系分支而不是母系的身份追踪......但我'd 建议使用 Pekka 建议的直接自动增量 ID,并在您的记录中包含指向 parent_id 和 Mother_id 的链接
  • @user 你也可以使用列模型创建视觉效果,只是需要更多的工作来实现。
【解决方案2】:

根据您的数据库的实际架构,您基本上有两种选择:

  1. 将整数匹配为字符串。

    SELECT * FROM table WHERE father_id LIKE '${f_id}%';
    
  2. 将整数匹配为数值。

    SELECT * FROM table WHERE father_id >= $f_id * 10 AND father_id < ($f_id + 1) * 10;
    

【讨论】:

    【解决方案3】:

    你的SQL错了,正确的语法是

    SELECT * FROM table WHERE Father_ID LIKE '$F_ID%' 
    

    【讨论】:

    • 我正在研究它,但在最坏的情况下,他将不得不施放它
    • LIKE 匹配字符串。所以不,它不适用于数字。 但是因为您实际上并没有使用变量的类型,而是使用$f_id 作为字符串,所以它会起作用。
    • @joschi:刚刚在 MySQL 5.x 上尝试过,它可以工作,我认为 MySQL 可以自动在字符串中进行强制转换
    • 你确定你使用了"所以PHP替换了$F_ID
    • 您必须区分“它适用于整数”和“它适用于将数字转换为字符串”。在这种情况下,它是后者,它有一些含义。与LIKE:dev.mysql.com/doc/refman/5.5/en/…进行模式匹配的文档
    【解决方案4】:

    我的语言搞混了,如果这无效,请见谅。请尝试以下操作:

    floor(number / 10);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-01
      • 1970-01-01
      • 2017-05-13
      • 1970-01-01
      • 2012-09-23
      • 1970-01-01
      • 2013-01-17
      相关资源
      最近更新 更多