Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá amigos, estou precisando criar uma expressão regular para a query seguinte:
mysql_query("SELECT * FROM arquivos WHERE path REGEXP 'AQUI' ");
onde tenho uma tabela no mysql que armazena os arquivos dos usuários, cada usuário pode criar e apagar pastas, e colocar arquivos dentro das mesmas, so que quando vou exibir os arquivos de dentro de determinada pasta, preciso de uma expressão regular para diferenciar as pastas das subpastas...
ex:
path -> pasta1/pasta2/imagem.jpg
path -> pasta1/imagem.jpg
preciso que a REGEXP selecione somente os arquivos da pasta1, separado da pasta1/pasta2 e assim por diante...
mais usando explode , eu teria que selecionar todos os registros da tabela, que é muito grande, isso seria muito lento...
acho que com o REGEXP seria mais pratico, mais com o explode da certo tb
Se for somente para pegar o nome das pasta no banco de dados
é mais facil vc pegar e trabalhar com um campo somente com o nome da pasta e usar GROUP BY
mysql_query("SELECT * FROM arquivos GROUP BY path ");
e trabalhe com o nome dos arquivos em outro campo.
não , tem mais dados além do path do arquivo...
quando o usuário pedir para exibir os arquivos da pasta A, quero que exiba somente os da pasta A, e não os da subpastas dela..
ex:
path-> A/imagem.jpg (exibir)
path-> A/B/imagem.jpg (não exibir)
estou usando assim: ("SELECT * FROM arquivos WHERE path LIKE '$pasta/%'");
so que com isso quando a var $pasta = 'A' exibe as duas imagens, e a segunda imagem e para ser exibida somente quando $path = 'A/B'Bom brother neste caso te aconselho a dar uma lida no manual do banco de dados sobre expressões regulares
Se o seu banco de dados for o mysql aqui esta o link:
http://dev.mysql.com/doc/refman/5.0/en/regexp.html
Mais ainda sim acho mais facil trabalhar com um campo para a pasta e outro para o arquivo.
obrigado, pensei também em fazer um campo para a pasta e outro para o arquivo, vai ser melhor para mim
Ate o momento, com o código abaixo deu tudo certo, do jeito que eu quero, mais ainda estou testando pra ver se não há falhas...
('SELECT * FROM arquivos WHERE path LIKE "'.$sub.'%" AND path NOT LIKE "'.$sub.'%/%"');
no php usando ER, ai vc tem dar adaptada para fazer no banco
o \w é [a-zA-Z0-9]
<?php
$img ="pasta1/pasta2/imagem.jpg";
$img2 = "pasta1/imagem2.jpg";
$er = "/\/(\w*)+\.+(jpg|png|gif)$/";
preg_match($er, $img, $ocorrencias);
echo "<pre>";
print_r($ocorrencias);
preg_match($er, $img2, $ocorrencias);
echo "<pre>";
print_r($ocorrencias);
essa consulta retorno somente o nome do arquivo sem ER.
select SUBSTRING_INDEX(imagem,'/',-1) from imagens
Obrigado shini,
muito boa dica, adaptei e deu certo, so que da seguinte forma como citei acima, deu certo também, é mais simples...
mysql_query('SELECT * FROM arquivos WHERE path LIKE "'.$sub.'%" AND path NOT LIKE "'.$sub.'%/%"');
q bom, agora vc sabe 2 formas de fazer. \o
sim kkkk vlw ae
ja tentou usar um explode por '/' ?