Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde
Na minha tabela tem um campo chamado subcatque esta assim
155,162,92,156,106,111,148,113,114,121,126,161,125,157,189,131,
Eu quero na select extrair somente o 114 (exemplo)
Estou usando assim
AND subcat LIKE '%".$segmento."%'
Mas ele traz registros que nao preciso (exemplo 189). No caso somente trairia se fosse 89.
Alguem tem uma ajuda ?
[]'s
Carlos
O problema é que no campo da tabela esta assim
155,162,92,156,106,111,148,113,114,121,126,161,125,157,189,131,
Tudo junto, separado por virgulas. No caso eu quero extrair somente o 114.
É um dos grandes problemas de utilizar tabelas não normalizadas...
Leitura:
:seta: http://www.devmedia.com.br/articles/viewcomp.asp?comp=8078
Neste caso você terá que fazer tudo com php mesmo e não mais com SQL
Pelo que entendi se esses numeros forem valores que você não sabe o que é faça assim;
<?
$q=mysql_query("SELECT subcat FROM tabela");
while($arr_fetch=mysql_fetch_array($q)):
$subcat .=$arr_fetch['subcat'];
// Escreva os códigos abaixo aqui
endwhile;
if(mysql_num_rows($q) == 0):
echo 'Nenhuma subcategoria encontrada';
endif;
?>
Pronto está em $subcat todos os valores, agora é só pegar eles.
Se de cara você souber em que posição está o valor que você quer basta:
<?
$subc=explode(",", $subcat);
echo $subc[8]; // Você quer o 114
?>
Agora se você não sabe em que posição está faça assim;
<?
$preg=preg_match('/'. $segmento .'/i', $subcat, $sct);
if(!$preg):
echo 'Não Encontrado!';
else:
echo $sct[0];
endif;
?>Logan, obrigado por me ajudar.
Somente mais uma coisa.
Ok...eu peguei o segmento, no caso 114, mas ele esta no meio, e eu nao sei a posição dele. Como eu faria a sql ?To tentando assim
$query_rsPaginacao = "SELECT * FROM empresas WHERE subcat LIKE '%$sct[0]%' ORDER BY imobiliaria";
Mas esta trazendo todos, independente de ser 114,14,141, etc...
Tb Ja tentei assim
$query_rsPaginacao = "SELECT * FROM empresas WHERE subcat = '$sct[0]' ORDER BY imobiliaria";
Mas tb nao deu
Eu fiz assim
$q=mysql_query("SELECT subcat FROM empresas");
while($arr_fetch=mysql_fetch_array($q)):
$subcat .=$arr_fetch['subcat'];
$preg=preg_match('/'. $segmento .'/i', $subcat, $sct);
endwhile;
ele traz o $sct como 114, mas o problema dai esta no filtro
De uma olhada na imagem. No caso tem varios 84, mas qdo eu filtro pelo 84, tb vem o 184, o que não quero que aconteça
/applications/core/interface/imageproxy/imageproxy.php?img=http://www.ipasppiracicaba.sp.gov.br/teste/img.jpg&key=8ba5240d5e0e5bc0f2cc92b57c808dbc06baf7c74471488fec2406fc7fc74985" alt="img.jpg" />
cara... é melhor normalizar essa tabela, e fazer uma modelagem correta.
http://wbruno.com.br/blog/2011/03/29/afinal-o-que-e-entidade/
William Bruno
Concordo contigo, o "pobrema" é que eu ja peguei o site feito e estou fazendo somente uma paginação dessa tabela. Infelizmente, não tem como mexer nas tabelas.
Então Logan
No caso eu ja tenho o valor que vem via variavel
O que preciso mesmo é como "quebrar" ele de dentro do campo segmento, pq na tabela esta tudo cadastrado separado por virgula.
Ter até tem, mas demanda tempo...
Tenta assim:
$query_rsPaginacao = "SELECT * FROM empresas WHERE subcat LIKE '%,$sct[0],%' ORDER BY imobiliaria";
Olha meu bom, esquece SQL nesse caso, agora você só poderá obter esses valores com uma linguagem server no caso aqui PHP.
Pelo que vi você quer mesmo os numeros ao invés de valores que você não saiba o que é, então vai ficar mais fácil ainda.
Vou lher ajuda mesmo com um código robusto aqui, mais você precisa me explicar esse projeto.
O que é e porque você quer pegar numeros.
Me responda e te direi o que fazer, até já.
Olha só essa imagem
/applications/core/interface/imageproxy/imageproxy.php?img=http://www.ipasppiracicaba.sp.gov.br/teste/img2.jpg&key=fce0bbd088d285aa3b1f2d8baf32af04a8b403464609677672ce3fb87dc6f066" alt="img2.jpg" />
Eu fiz com esse select
SELECT segmento, subcat FROM empresas WHERE segmento LIKE '%8%'
O que preciso agora é pegar no campo SUBCAT somente os registros que tenho valor 150 (por exemplo).
Como você ve eles estão separados por virgula e se eu usar do jeito que to usando
$query_rsPaginacao = "SELECT * FROM empresas WHERE segmento LIKE '%8%' AND subcat LIKE '%150%'";
Ele vai trazer todos (150,115,etc).
Então acredito que eu tenha que separar individualmente.
[]'s
MSN: karlosrapanui@hotmail.com
Você quer:
No meio de tantas,(vírgulas) você quer pegar apenas um determinado valor, mas ele pode se repitir várias vezes e você quer todos.
Para isso faça assim:
<? $q=mysql_query("SELECT subcat FROM empresas");
while($arr_fetch=mysql_fetch_array($q)):
$subcat .=$arr_fetch['subcat'];
endwhile; ?>
Depois de ter feito a query, você já tem todos os valores tudo está dentro de "$subcat" concatenado;
Agora ao trabalho;
<?
$preg=preg_match_all('/'. $seguimento .'/i', $subcat, $sct);
// Mostrar todos os que foram encontrados sem vírgula é claro
for($i=0;$i<$preg;$i++):
echo $sct[0][$i];
endfor;
// Formatando com marcação
for($i=0;$i<$preg;$i++):
echo '<div id="subcat'. $i .'" style="display:block;"> '.$sct[0][$i] . '</div>';
endfor;
if(!$preg OR $preg==0):
echo 'Nada encontrado';
endif;
//Agora e se você quiser pegar todos e exibir sem vírgula
$preg=preg_match_all('/([0-9]++)/i', $subcat, $sct);
for($i=0;$i<$preg;$i++):
echo '<div id="subcat'. $i .'" style="display:block;"> '.$sct[1][$i] . '</div>';
endfor;
if(!$preg OR $preg==0):
echo 'Nada encontrado';
endif;
?>Última tentativa:
$query_rsPaginacao = "SELECT * FROM empresas WHERE segmento LIKE '(,?8,)|(,8,?)' AND subcat RLIKE '(,?150,)|(,150,?)'";
Enrique acabei de postar a solução acima pra ele e você postou essa sem saber que eu já tinha postado, isso que você está fazendo não vai resolver.
O que você está fazer é pedindo ao mysql para econtrar ROWS que contenha estes parametros e o mysql vai encontrar e vai devolver o que ele econtrou, no caso um monte de numeros separados por vírgula, olha, mysql não pode separar um conteúdo e entregar separado como se fosse PHP, não insista em usar SQL
Logan Martinelli
To quase chegando la, eu exibo na tela, mas se eu quizer fazer um select filtrando, que variavel eu pegaria ?
Fiz assim e num funfou
$query_rsPaginacao = "SELECT * FROM empresas WHERE subcat = $preg";>
Fiz assim e num funfou
$query_rsPaginacao = "SELECT * FROM empresas WHERE subcat = $preg";
Só corrigindo, não é assim que se pega os resultados de preg_match e preg_match_all
$preg=preg_match_all('/'. $seguimento .'/i', $subcat, $sct);
Tá vendo aquela variávelzinha ali $sct; então é nela que está o conteúdo, mas ela é um array e em preg_math_all você exibe assim $sct[0][0], $sct[0][1], $sct[0][2] e em preg_match apenas $sct[0] etc..., mas se em "preg_match_all ou preg_match" você encontrar parametros para pegar parte dum um conteúdo ex: "([^]++)" então ao inves de $sct[0][1], será assim $sct[1][0], $sct[1][1] etc. e preg_match assim $sct[1];
Voltando:
Em SQL você não vai conseguir mesmo, o que estou postando não é um caminho para você fazer a query, não, já é o conteúdo final mostrando para seu cliênte.
Se os dados em uma tabela estiverem assim: "joão|maria|josé ou joão,maria,josé"
Como você disse que pegou o sistema pronto, é porque quem fez, queria pegar os dados não por mysql_query; ele queria pegar exatamente como passei para você acima, ele usaria mysql_query apenas para exibir todos.
Conteúdo inserido no banco assim não pode ser resgatado em partes, o mysql sempre vai lhe retornar todos os dados com vírgula para que você os separe como mostrei acima.
Use o script que postei acima ele lhe dá uma solução completa para exibir os dados.
Maravilha, entendi agora.
Brigadão mesmo pela força
Grande abraço
Só mais uma coisa.......dessa maneira ele exibiu todo o conteudo da tabela, mas e se eu quizer um valor especifico ???Exemplo, se eu quiser somente quem tenha valor 111 ?
Boa tarde colega!
Deixa eu ver se entendi:
Você quer extrair um determinado valor de um campo, cujo nome é "subcatque".
Desta forma, é possível implementar da seguinte maneira:
Espero ter ajudado.