Sem teres que alterar a estrutura das tuas tabelas, poderás criar uma view com:
Código:
CREATE VIEW codigos_imoveis AS
SELECT @id_imovel_agente := IF(@agencia = id_agencia AND @agente = id_agente, @id_imovel_agente + 1, 1) AS id_imovel_agente,
CONCAT(CONCAT(CONCAT(CONCAT(id_agencia, '-'), id_agente), '-'), @id_imovel_agente) AS codigo,
@agencia := id_agencia AS id_agencia,
@agente := id_agente AS id_agente,
id_imovel
FROM agencias_agentes_imoveis
Sendo que agencias_agentes_imoveis poderá ser uma outra view ou explicitas os inner joins que tinhas feito nesta propria view.
Para que os id_imovel_agente se mantenham coesos, não deverás apagar os imoveis. Em vez disso, cria uma tabela onde consideras os imoveis "removidos"
Código:
CREATE TABLE imoveis_inactivos (
id_imovel INTEGER NOT NULL,
PRIMARY KEY(id_imovel)
);
Para ver todos os imoveis "activos", basta usar qq coisa do género:
Código:
SELECT *
FROM imoveis
WHERE id_imovel NOT IN (SELECT id_imovel FROM imoveis_inactivos)
Usando a view:
Código:
SELECT *
FROM agencias_agentes_imoveis
WHERE id_imovel NOT IN (SELECT id_imovel FROM imoveis_inactivos)
Não tenho a informação da tua estrutura das tabelas e relações entre si, isto é só uma forma de mostrar uma possivel forma de dar a volta ao problema =)
Marcadores