janick 1 Denunciar post Postado Novembro 26, 2007 Olá! Estou com uma dúvida com relação a SELECT e ARRAY. Tenho uma linha em uma tabela chamada "cesta" que contém uma array com valores (Ex. 1, 2, 3). Estes valores são referentes aos id´s de produtos que estão na tabela "produtos". E tenho um SELECT que acessa as duas tabelas e me retorna informações sobre os produtos que encontrou em uma determinada cesta. A minha dúvida é como ler essa array dentro do SELECT, ou ainda, como ler este array, sem um for? Do jeito que está ele só lê o primeiro produto da cesta. O código é: PHP $sql = mysql_query(" SELECT * FROM cesta INNER JOIN produtos ON (cesta.produtos = produtos.id) ORDER by rand() LIMIT 4 "); Compartilhar este post Link para o post Compartilhar em outros sites
Paulo André 0 Denunciar post Postado Novembro 27, 2007 E como você guarda este pseudo-array na tabela? :huh: Compartilhar este post Link para o post Compartilhar em outros sites
janick 1 Denunciar post Postado Novembro 27, 2007 existe um select multiple no formulario de cadastro. ele seleciona os itens que deseja para a cesta. (os produtos). e envia, fica salvo na linha produtos da tabela cesta como (Ex. 30, 32, 33). antes eu estava trabalhando com dois select, explode e um for para mostrar os produtos da cesta. Mas dai me falaram que fica mais interessante usar só este select que coloquei acima. Eu consigo acessar ok, só que só me retornar o primeiro produto da array. a idéia é que me mostre 4 por vez e randomicamente. Mas não estou conseguindo fazer isso. Valeu! Compartilhar este post Link para o post Compartilhar em outros sites
Paulo André 0 Denunciar post Postado Novembro 27, 2007 Acho que a confusão está quando você pensa que estes números separados por vírgulas é um array. :huh: Ainda sim, continuei sem entender, BTW, existe a função FIND_IN_SET() do mYSQL que você busca em um campo neste mesmo formato que você tem, um valor específico. Por exemplo, eu quero procurar por 40 no campo produtos: WHERE FIND_IN_SET(40, produtos) []'s Compartilhar este post Link para o post Compartilhar em outros sites
janick 1 Denunciar post Postado Novembro 27, 2007 ué, eu imaginava que isso fosse um array. isto é, o fato de pegar os id´s selecionados em um select multiple e salvar em uma linha da minha tabela. está assim tabela : cesta linha : produtos - (Ex. 1, 2, 3) - Isto é, os produtos com id 1, 2, e 3 estão cadastrados nesta cesta. tabela : produtos O que tento é, em um só select, acessar a cesta, ler os produtos, acessar produtos, e retornar os dados. na realidade consegui, só que só retorna 1 produto, que no caso é o primeiro da pseudo-array, (Ex. 1) Compartilhar este post Link para o post Compartilhar em outros sites
janick 1 Denunciar post Postado Novembro 28, 2007 me desculpa por postar novamente, mas é que estou tentando aqui e não consegui nada ainda. se alguém puder dar mais um help! obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
Paulo André 0 Denunciar post Postado Novembro 28, 2007 Me dê um exemplo de um valor que tem em cesta.produtos e um valor de produtos.id que ai vou chutar uma solução aqui. []'s Compartilhar este post Link para o post Compartilhar em outros sites
janick 1 Denunciar post Postado Novembro 28, 2007 Beleza. Tenho uma situação assim (exemplo): tabela 'cesta' -> linha 'produtos'-> 21,20,19,18,27,32,45 (id dos produtos, que estão na tabela 'produtos' que foram escolhidos para estar nesta cesta como exemplo). O que estou tentando fazer é: Mostrar 4 destes produtos que estão na cesta randomicamente, usando o select abaixo. Valeu. Compartilhar este post Link para o post Compartilhar em outros sites
Paulo André 0 Denunciar post Postado Novembro 28, 2007 Teste esta query: SELECT * FROM cesta a, produtos b WHERE FIND_IN_SET(b.id, a.produtos) ORDER BY RAND() LIMIT 4 []'s Compartilhar este post Link para o post Compartilhar em outros sites
janick 1 Denunciar post Postado Novembro 28, 2007 Cara deu totalmente certo! Muito obrigado mesmo !!! Ficou assim, se servir pra alguém! Engraçado que nem precisou do INNER JOIN e nada mais! $sql = mysql_query(" SELECT * FROM cesta, produtos WHERE FIND_IN_SET(produtos.id, cesta.produtos) ORDER by rand() LIMIT 4 "); Compartilhar este post Link para o post Compartilhar em outros sites
Paulo André 0 Denunciar post Postado Novembro 28, 2007 Na verdade, esta é outra forma de usar INNER JOIN. Ou seja, de uma forma ou de outra eu faço referência de uma tabela para a outra, na mesma query. PS. é porque eu não sei usar a outra forma de INNER JOIN. :P []'s Compartilhar este post Link para o post Compartilhar em outros sites