Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho uma dúvida, quero fazer um recordset q é filtrado pelas ids geradas por outro recordset, vejam:
RECORDSET QUE VAI FILTRAR AS IDS
mysql_select_db($database_conexao, $conexao);
$query_filtro_vend = "SELECT * FROM vendedores WHERE mostrar_produtos = '1'";
$filtro_vend = mysql_query($query_filtro_vend, $conexao) or die(mysql_error());
$row_filtro_vend = mysql_fetch_assoc($filtro_vend);
$totalRows_filtro_vend = mysql_num_rows($filtro_vend);
$currentPage = $_SERVER["PHP_SELF"];
RECORDSET QUE VAI USAR AS IDS FILTRADAS COMO FILTRO
mysql_select_db($database_conexao, $conexao);
$query_rs_produtos = sprintf("SELECT * FROM produtos WHERE classificacao = %s AND produtos.vendedor_id IN (AQUI VAO AS IDS QUE O OUTRO RECORDSET PEGOU) ORDER BY nome ASC", GetSQLValueString($colname_rs_produtos, "text"));
$query_limit_rs_produtos = sprintf("%s LIMIT %d, %d", $query_rs_produtos, $startRow_rs_produtos, $maxRows_rs_produtos);
$rs_produtos = mysql_query($query_limit_rs_produtos, $conexao) or die(mysql_error());
$row_rs_produtos = mysql_fetch_assoc($rs_produtos);Fiz assim
mysql_select_db($database_conexao, $conexao);
$query_rs_produtos = sprintf("SELECT * FROM produtos WHERE classificacao = %s AND produtos.vendedor_id IN (SELECT * FROM vendedores WHERE mostrar_produtos = '1') ORDER BY nome ASC", GetSQLValueString($colname_rs_produtos, "text"));
$query_limit_rs_produtos = sprintf("%s LIMIT %d, %d", $query_rs_produtos, $startRow_rs_produtos, $maxRows_rs_produtos);
$rs_produtos = mysql_query($query_limit_rs_produtos, $conexao) or die(mysql_error());
$row_rs_produtos = mysql_fetch_assoc($rs_produtos);
E apareceu o erro "Operand should contain 1 column(s)"
E agora?
o select interno você colocou "*", escolha apenas o campo que vai ser comparado
conforme meu exemplo
fiz assim:
"SELECT * FROM produtos WHERE classificacao = %s AND produtos.vendedor_id IN (SELECT mostrar_produtos FROM vendedores WHERE mostrar_produtos = '1') ORDER BY nome ASC"
E aparecerem os produtos de apenas 1 dos vendedores q têm o campo mostrar_produtos sendo igual a 1...
na tabela vendedores o campo que é o id do vendedor é mostrar_produtos??
Não... o campo mostrar_produtos diz se é ou não para mostrar os produtos daquele vendedor... se o valor de mostrar_produtos for 1 os produtos serão mostrados se for 0 não serão.
o objetivo é o seguinte:
O recordset vendedores deverá olhar na tabela de vendedores, e selecionar somente as IDS dos vendedores que tem o valor 1 no campo MOSTRAR_PRODUTOS.
Na tabela Produtos, temos os campos ID_DO_PRODUTO e ID_DO_VENDEDOR
O recordset de produtos deverá pegar os IDS filtrados pelo recordset vendedores e selecionar apenas os produtos que tiverem essas mesmas ids no campo ID_DO_VENDEDOR....
Entendeu ? :)
pois é,
você está comparando vendedor_id da tabela produtos ao mostrar_produtos da tabela vendedores
são campos que não tem ligação.
conserta isso ae.
Acho q voce não entendeu... Veja o código:
"SELECT * FROM produtos WHERE classificacao = %s AND vendedor_id IN (SELECT id FROM vendedores WHERE mostrar_produtos = '1') ORDER BY nome ASC"
O problema é q ele não está filtrando com todas as IDS obtidas... no código acima, o site deveria exibir os produtos dos vendedores 8 e 11 (pois estes tem o campo MOSTRAR_PRODUTOS=1) só que eles só está mostrando os produtos do vendedor 8, falta o 11... ou seja, quando executado, o código deveria ficar assim para q funcione:
"SELECT * FROM produtos WHERE classificacao = %s AND vendedor_id IN (8,11) ORDER BY nome ASC"
faz os selects separadamente e veja o que está errado
SELECT id FROM vendedores WHERE mostrar_produtos = '1'
e depois o resultado que der no select de cima usa no select de baixo manualmente
SELECT * FROM produtos WHERE classificacao = %s AND vendedor_id IN (coloque aqui o resultado da query anterior) ORDER BY nome ASC"Fiz o teste do "SELECT id FROM vendedores WHERE mostrar_produtos = '1'" e ele retornou a id 8... porém, deveria ter retornado as ids 11 e 12 também, pois as duas tem mostrar_produtos = '1'
da uma verificada minunciosa ae,
a query está correta como eu suspeitava!
se o campo for do tipo inteiro, tira as aspas '' do número 1
Tirei as aspas, mas o problema persiste :(
você olhou diretamente no banco se existem esses registros que você está falando??
Olhei velho... Olha, eu criei um REPEAT REGION com o campo ID no recordset vendedores e consegui q o site mostrasse todas as ids... Ficou assim o código:
<?php do { echo $row_vendedores['id'].","; } while ($row_vendedores = mysql_fetch_assoc($vendedores)); echo "0";?>
Obs: coloquei o zero no fim para que o campo nao termine com virgula, exemplo: 8,11,12, e sim 8,11,12,0
O site retornou os valores 8,11,12,0...
Agora, só preciso colocar esse código dentro daqui:
("SELECT * FROM produtos WHERE classificacao = %s AND vendedor_id IN (**<?php do { echo $row_vendedores['id'].","; } while ($row_vendedores = mysql_fetch_assoc($vendedores)); echo "0";?>**)
Só que não da certo assim... O que eu posso fazer?
isso é gambiarra!!!
a query está certa, verifica os valores da variáveis, pode ter algum valor errado na query
Olha, refiz os recordsets e o código, mas o erro persiste...
mysql_select_db($database_conexao, $conexao);
$query_vendedoresPermitidos = "SELECT * FROM vendedores WHERE mostrarProdutos = 1";
$vendedoresPermitidos = mysql_query($query_vendedoresPermitidos, $conexao) or die(mysql_error());
$row_vendedoresPermitidos = mysql_fetch_assoc($vendedoresPermitidos);
$totalRows_vendedoresPermitidos = mysql_num_rows($vendedoresPermitidos);
$pegaids = $row_vendedoresPermitidos['id'];
mysql_select_db($database_conexao, $conexao);
$query_produtos = "SELECT * FROM produtos WHERE 'produtos.idVendedor IN ($pegaids) ORDER BY rand()";
$produtos = mysql_query($query_produtos, $conexao) or die(mysql_error());
$row_produtos = mysql_fetch_assoc($produtos);
$totalRows_produtos = mysql_num_rows($produtos);
O que eu posso fazer pra que de certo?
Olha só, fiz de um jeito diferente do que falei no post acima e DEU CERTO :clap: :
mysql_select_db($database_conexao, $conexao);
$query_produtos = "SELECT * FROM produtos WHERE mostrar = 1 AND idVendedor IN (SELECT id FROM vendedores WHERE mostrarProdutos = 1) ORDER BY rand()";
$query_limit_produtos = sprintf("%s LIMIT %d, %d", $query_produtos, $startRow_produtos, $maxRows_produtos);
$produtos = mysql_query($query_limit_produtos, $conexao) or die(mysql_error());
$row_produtos = mysql_fetch_assoc($produtos);
Obrigado aii galera : )
pode usar assim
select * from tabela where id IN (select id from outra_tabela where id = 1)