Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

karlosrapanui

[Resolvido] Extrair campo da tabela

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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:

 

Obs.:Considerando que o valor da coluna "subcatque" é "114";

 


SELECT * FROM NOME_DA_TABELA
WHERE subcatque=114

 

 

Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É um dos grandes problemas de utilizar tabelas não normalizadas...

Leitura:

:seta: http://www.devmedia.com.br/articles/viewcomp.asp?comp=8078

Compartilhar este post


Link para o post
Compartilhar em outros sites

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;

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

 

img.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara... é melhor normalizar essa tabela, e fazer uma modelagem correta.

http://wbruno.com.br/blog/2011/03/29/afinal-o-que-e-entidade/

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ter até tem, mas demanda tempo...

 

Tenta assim:

$query_rsPaginacao = "SELECT * FROM empresas WHERE subcat LIKE '%,$sct[0],%' ORDER BY imobiliaria";

Compartilhar este post


Link para o post
Compartilhar em outros sites

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á.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha só essa imagem

 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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;
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Última tentativa:

$query_rsPaginacao = "SELECT * FROM empresas WHERE segmento LIKE '(,?8,)|(,8,?)' AND subcat RLIKE '(,?150,)|(,150,?)'";

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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";

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.