Eu tenho essa tabela simples e registros de usuário.
Eu só quero que os usuários com ilike ou outra coisa consigam uma ordem melhor no PostgreSQL 10.12.
CREATE TABLE users(
ID INT PRIMARY KEY NOT NULL,
username CHAR(50) NOT NULL
);
INSERT INTO users (id, username) VALUES(1,'mandela');
INSERT INTO users (id, username) VALUES(2,'delpiero');
INSERT INTO users (id, username) VALUES(3, 'gondela');
INSERT INTO users (id, username) VALUES(4, 'del');
INSERT INTO users (id, username) VALUES(5, 'dell');
INSERT INTO users (id, username) VALUES(6, 'andel');
Quando eu consulto "del", quero obter o usuário "del" cujo id é 4 em primeiro lugar. tudo bem com pedidos por comprimento. Mas ainda não é o que eu quero. A ordem deve ser assim. A segunda ordem deve ser "dell", a terceira ordem deve ser "delpiero", a quarta "andel", a quinta "gondela" e a sexta "mandela".
select * from users where username ilike '%del%' order by length(users.username) asc;
Parece-me que você quer as correspondências principais primeiro, depois as strings mais curtas primeiro e, finalmente, a ordem de classificação alfabética:
db<>fique aqui
NOT ILIKE 'del%'
porquefalse
classifica antestrue
. Ver:Além: Nunca use
char(n)
. Ver:Talvez algo assim:
Mas com que base se rompe o vínculo entre "gondela" e "mandela"?