Как убрать последнюю цифру целого числа?(PHP) - PullRequest
1 голос
/ 24 декабря 2011

Каков наилучший способ удалить последнюю цифру целого числа в запросе MySQL ??

Я работаю над генеалогическим проектом. Предполагая, что father_id будет

10001

дети тогда будут

100011
100012
100013

ЭСТ.

Я получаю father_ID, и мне нужно иметь возможность получить всех его детей

Я пытался:

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

Но это не сработало.

Я нашел этот пост о преобразовании целого числа в массив, я думаю, что это могло бы помочь, но я не знаю, что я буду делать после этого.

Заранее спасибо!

Ответы [ 4 ]

6 голосов
/ 24 декабря 2011

Я не уверен, что это хороший способ построить семейное дерево вообще.Использование «идентификатора отца», как вы делаете

  • , позволяет отслеживать только одного родителя - не очень подходит для каких-либо серьезных исследований предков
  • затрудняет внесение изменений - вам придется пересчитатьу всего удостоверения личности, если сделано исправление
  • есть проблема, о которой упоминает @stefgosselin - как насчет семей с более чем 10 детьми?

Единственный плюс, который я могу видеть, это то, что это ужасно легкозапросить всех потомков одного предка, но это само по себе не стоит ИМО.

Я бы использовал обычные идентификаторы автоинкремента и дал бы каждой записи столбец parent (или father и * 1015).*, конечно, или для учета однополых родителей, parent1 и parent2).Этот столбец будет содержать идентификатор родительской записи.

Тогда вы могли бы просто выполнять такие запросы, как

SELECT * FROM table WHERE father = `530`

, и запросы предков становились бы немного сложнее, но все остальное становится намного проще.

2 голосов
/ 24 декабря 2011

В зависимости от фактической схемы вашей базы данных у вас есть два основных варианта:

  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;
    
1 голос
/ 24 декабря 2011

Ваш SQL был неверным, правильный синтаксис:

SELECT * FROM table WHERE Father_ID LIKE '$F_ID%' 
0 голосов
/ 24 декабря 2011

Я перепутал свои языки, поэтому извините, если это неверно.Попробуйте следующее:

floor(number / 10);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...