Роман Рубашкин: я не вижу у вас таблицы компаний, у вас есть клиенты, есть услуги и все. О каких компаниях идет речь вообще не понятно, сформулируйте четко вопрос по предоставленным данным, без разброса мыслей и синонимов.
Роман Рубашкин: у вас вообще не понятное построение реляционной модели, уберите из таблицы сервисов customers, оставляя там только название для запросов и добавьте в таблицу bills все контролирующие элементы и стройте индексы по ним. Вообще самый простой ответ, не добавляйте счет, если услуга не предоставлялась и все, а если предоставлялась, то записывайте сразу в bills
Дмитрий: дак не нужно реплейс делать, используйте preg_match("/[0-9]{3} [0-9]{3} [0-9]{3}/", $code, $result) и посмотрите var_dump($result). Если используете не по 1 строчке, то preg_match_all наилучшим образом вам подойдет.
По какому критерию то идет проверка ? Если типы полей не блоб или текст, то ставь индексы на них и не парься. Тут вопрос то в размерах базы, возможно просто при инициализации делать полную выгрузку данных из базы и запихивать его в массив php, а там уже и сравнивать при добавлении записи.