e3tadashi 0 Denunciar post Postado Dezembro 26, 2012 Olá galera! Estou tentando fazer um request onde puxo uma lista de quantidade de produtos registradas em uma loja e gostaria de ordena-la pela quantidade de produtos registrados na mesma. Algo do tipo: $sql = "SELECT id, COUNT(id) FROM produtos WHERE ".$resultado['shop']." <> '' ORDER BY COUNT(id)"; Tudo funciona certinho, menos o ORDER BY que não está dando efeito. Como faço essa lista ordenada por count()? Abraços! e Feliz Natal! hohoho... Compartilhar este post Link para o post Compartilhar em outros sites
manolegal 12 Denunciar post Postado Dezembro 26, 2012 Tenta aí: $sql = "SELECT id, COUNT(id) as teste FROM produtos WHERE ".$resultado['shop']." <> '' ORDER BY teste"; Compartilhar este post Link para o post Compartilhar em outros sites
e3tadashi 0 Denunciar post Postado Dezembro 26, 2012 Ainda não ta dando =/ Compartilhar este post Link para o post Compartilhar em outros sites
manolegal 12 Denunciar post Postado Dezembro 26, 2012 ORDER BY teste ASC"; Não há necessidade de agrupamento de dados? Compartilhar este post Link para o post Compartilhar em outros sites
e3tadashi 0 Denunciar post Postado Dezembro 26, 2012 Com esse ASC ele não faz a contagem. Já tentei com group by e tbm não dá. x.x Compartilhar este post Link para o post Compartilhar em outros sites
jhrhp 15 Denunciar post Postado Dezembro 26, 2012 $sql = "SELECT id, COUNT(*) AS total FROM produtos WHERE '".$resultado['shop']."' <> '' GROUP BY id ORDER BY total"; Compartilhar este post Link para o post Compartilhar em outros sites
e3tadashi 0 Denunciar post Postado Dezembro 26, 2012 Quando agrupa as contagens ficam tudo 1. Compartilhar este post Link para o post Compartilhar em outros sites
manolegal 12 Denunciar post Postado Dezembro 27, 2012 Isso deve estar acontecendo por existir somente 01 valor para cada ID. Caso existam ids repetidos, deve fazer a soma. Compartilhar este post Link para o post Compartilhar em outros sites
erison 63 Denunciar post Postado Dezembro 27, 2012 cara esse teu select ta errado pq não da para agrupara pelo id para o id e alto incremente. e nunca vai se repetir oq você que fazer explique você que exibir os id. e esses id se não se repetir para que você que contar? pq o count vai sempre ser 1; ou você quer exibir o count do resultado so select? se for: $sql = "SELECT id, COUNT(*) FROM produtos WHERE ".$resultado['shop']." <> '' ORDER BY COUNT(*)"; se esse id não for autoincrement e se repetir você pode contar quantas veses aquele id aparece desta forma $sql = "SELECT id, COUNT(*) FROM produtos WHERE ".$resultado['shop']." <> '' Group By id ORDER BY COUNT(*)"; Compartilhar este post Link para o post Compartilhar em outros sites
e3tadashi 0 Denunciar post Postado Dezembro 28, 2012 O atual está assim: $sql = "SELECT id, COUNT(*) as products FROM produtos WHERE ".$resultado['shop']." <> ''"; Assim ele mostra o numero de produtos que estão nas respectivas lojas. As id's dos produtos são auto incremento. Agora eu queria poder ordenar essa exibição pelo numero de produtos da loja, ou seja, pelo COUNT(*). Já tentei monte de coisa aqui e não ta indo... x.x Compartilhar este post Link para o post Compartilhar em outros sites
InterPlanet 7 Denunciar post Postado Dezembro 28, 2012 $sql = 'SELECT loja, COUNT(id) as total_produtos FROM produtos WHERE loja <> "" ORDER BY total_produtos; Isto, considerando que: - id é um autoincremento, consequentemente único, para cada registro; - produtos e o nome da tabela; - loja é campo que relaciona determinado produto a uma determinada loja; - campo loja não está vazio (condição/where). Adeque ao seu código e poste o resultado. Compartilhar este post Link para o post Compartilhar em outros sites
Marcos_imasters 288 Denunciar post Postado Dezembro 28, 2012 $verificar = mysql_query("SELECT * FROM produtos WHERE loja ORDER BY id DESC"); $x= mysql_num_rows($verificar); <?=$x?> // total <?=$x['nome']?> // nome do produto espero ajuda se for isso que estou pessando. Compartilhar este post Link para o post Compartilhar em outros sites
erison 63 Denunciar post Postado Janeiro 8, 2013 tem certesa que desta forma esta dando certo? pq deste geito o count e uma função agregada, e prescisa de um group by caso seja exibido com outro. como falei acho q este select esta errado. poderia de certo desta forma. Select loja,Count(*) From tabela Where trim(loja) <> "" and loja is not null group by loja Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Janeiro 8, 2013 como falei acho q este select esta errado. Pode ter a certeza de que está errado. @InterPlanet já deu 99% da solução, exceto por um detalhe: - campo loja não está vazio (condição/where). 'loja <> ""' Apesar de, em determinados casos, você pode salvar uma string vazia em um campo, isso está errado. Você deve salvar conteúdo ou manter o campo como null. Se eu não me engano, o SGBD MySQL reconhece "" (string vazia) como NULL, outros SGBDs reconhecem como string vazia. O correto seria: 'WHERE loja IS NOT NULL' Compartilhar este post Link para o post Compartilhar em outros sites
Thiago Genuino 4 Denunciar post Postado Janeiro 8, 2013 Eu acho que oq você quer é SELECT loja, COUNT(*) as total from produtos group by loja Compartilhar este post Link para o post Compartilhar em outros sites
e3tadashi 0 Denunciar post Postado Janeiro 8, 2013 Então galera, No meu caso, a loja é uma coluna da tabela produtos. Funciona assim... Quando eu registro uma loja, eu crio uma coluna na tabela produto com o nome daquela loja. Quando insiro um produto na loja, eu preencho a respectiva coluna da loja com a id do produto. E quando vou imprimir os produtos da loja, eu leio a coluna da respectiva loja, vejo as ids, e busco os respectivos produtos na tabela produtos. O que eu estou tentando imprimir no caso, é a quantidade de produtos em uma loja. E aproveitei que como as ids dos produtos são únicas, tentei fazer um count(id) na tabela produtos, agrupando pela coluna da respectiva loja. Existe uma tabela lojas, apenas com os nomes das lojas e ids. Mas pra buscar a quantidade de produtos eu olho pra coluna na tabela produtos. Eu consigo imprimir a quantidade de cada loja. Mas eu queria exibir as lojas em ordem dessa quantidade. Isso que não está dando certo... Compartilhar este post Link para o post Compartilhar em outros sites
erison 63 Denunciar post Postado Janeiro 9, 2013 cara tem algo errado. se esse select esta dando certo, então tem algo errado no seu banco não entedie quando você falo Quando eu registro uma loja, eu crio uma coluna na tabela produto com o nome daquela loja. você cria uma coluna no bd? se tiver criando uma coluna no banco esta muito errado. rsrsrrs. acho q você digito errado. como todo mundo ai falo que ta errado, e mais facil você esta errando do que todo mundo não acha. ou você não esta esplicando direito. fassa assim, para poder lhe ajudar. coloque ai as tabelas que você esta usando nesta consulta. ex: #loja id nome etc #produtos id nome etc Compartilhar este post Link para o post Compartilhar em outros sites
e3tadashi 0 Denunciar post Postado Janeiro 9, 2013 Talvez a forma como eu implementei as coisas é que esteja de um jeito que não possibilite o que estou querendo... Tabela Lojas: CREATE TABLE IF NOT EXISTS `lojas` ( `id` int(50) NOT NULL AUTO_INCREMENT, `shop` varchar(50) COLLATE utf8_unicode_ci NOT NULL, `description` text COLLATE utf8_unicode_ci NOT NULL, `logo` varchar(50) COLLATE utf8_unicode_ci NOT NULL, `order_by` varchar(50) COLLATE utf8_unicode_ci NOT NULL, `product_width` varchar(5) COLLATE utf8_unicode_ci NOT NULL, `slider` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=16 ; Tabela produtos: CREATE TABLE IF NOT EXISTS `produtos` ( `id` int(5) NOT NULL AUTO_INCREMENT, `image` varchar(100) COLLATE utf8_unicode_ci NOT NULL, `product` varchar(50) COLLATE utf8_unicode_ci NOT NULL, `categorie` varchar(50) COLLATE utf8_unicode_ci NOT NULL, `subcategorie` varchar(50) COLLATE utf8_unicode_ci NOT NULL, `brand` varchar(50) COLLATE utf8_unicode_ci NOT NULL, `title` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, `subtitle` varchar(50) COLLATE utf8_unicode_ci NOT NULL, `description` longtext COLLATE utf8_unicode_ci, `price` float DEFAULT NULL, `status` varchar(20) COLLATE utf8_unicode_ci NOT NULL, `datetime` varchar(20) COLLATE utf8_unicode_ci NOT NULL, `acessorios` varchar(5) COLLATE utf8_unicode_ci DEFAULT '', `calcados` varchar(5) COLLATE utf8_unicode_ci DEFAULT '', `beleza` varchar(5) COLLATE utf8_unicode_ci DEFAULT '', `chapeis` varchar(5) COLLATE utf8_unicode_ci DEFAULT '', `todos` varchar(5) COLLATE utf8_unicode_ci DEFAULT '', `shops_teste` varchar(5) COLLATE utf8_unicode_ci DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=128 ; As colunas: acessorios, calcados, beleza, chapeis, todos e shops_teste são lojas que eu criei na pagina de administração das lojas, e são inseridas dessa forma: $sql = "INSERT INTO lojas (shop, description, logo, order_by, product_width) VALUES ('".$_shop."', '".$_description."', '".$nome_imagem."', '".$_POST['order_by']."', '5')"; $query = mysql_query($sql); $sql = "ALTER TABLE produtos ADD ".$_shop." varchar(5) DEFAULT ''"; $query = mysql_query($sql); Ou seja, eu registro a loja na tabela lojas, e crio uma coluna na tabela produtos. Inserindo um produto na loja: $sql = "UPDATE produtos SET ".$loja['shop']." = '".$_POST['item']."' WHERE id = '".$_POST['item']."'"; $query = mysql_query($sql); Ou seja, eu guardo na coluna da respectiva loja, a id do respectivo produto. Então na pagina do cliente, quando quero exibir os produtos de uma loja: <div id="showcase"> <div class='showcase_row'> <?php switch($config_ini){ case 'first': { $sql = "SELECT * FROM produtos WHERE ".$loja." <> '' AND categorie = '".$link_cat."' ".$link_sub; break; } case 'all': { $sql = "SELECT * FROM produtos WHERE ".$loja." <> '' ".$link_cat." ".$link_sub; break; } } $query = mysql_query($sql); while($resultado = mysql_fetch_assoc($query)){ echo " <div class='showcase_box' style='width:".$product_width."'> <a><img class='img' src='produtos/".$resultado['image']."' /></a> <div class='title'><span class='padL'>".$resultado['title']."</span></div> <div class='subtitle'>".$resultado['subtitle']."</div> <div class='price'>R$ ".$resultado['price']."</div> </div> "; } ?> </div> </div><!--showcase--> Agora na pagina de administração das lojas, quero exibir as lojas e a quantidade de produtos registrados nela. $sql = "SELECT * FROM lojas"; $query = mysql_query($sql); while($resultado = mysql_fetch_assoc($query)){ $sql = "SELECT id, COUNT(id) AS products FROM produtos WHERE ".$resultado['shop']." <> ''"; $query2 = mysql_query($sql); $quantidade = mysql_fetch_array($query2); /*imprimindo os dados...*/ echo" <tr> <td>".$resultado['shop']."</td> <td><img class='mini_logo' src='lojas/".$resultado['logo']."' /></td> <td>".$quantidade['products']."</td> <td>".$resultado['description']."</td> <td>".$resultado['order_by']."</td> <td>".$resultado['product_width']."</td> <td>".$resultado['slider']."</td> </tr> "; } Da forma que esta implementado, há jeito de exibir as lojas em ordem da quantidade de produtos registrados na loja? Compartilhar este post Link para o post Compartilhar em outros sites