Good 4 Denunciar post Postado Março 12, 2013 Como alguns de vocês já jogaram algum MMO, quando você compra Life, Mana, etc.. Sempre vem um pacote com x unidades (chama-se stack). Tenho um jogo aqui, aí há categorias de armas, consumíveis, etc. Os consumíveis só há 3 itens, como life, mana e coins. A query pra fazer o stack, fica assim: SELECT *, COUNT(inventario.iid) AS total FROM inventario,itens WHERE inventario.user_id = '1' AND inventario.item_id = itens.id AND inventario.tipo = 'Box' GROUP BY inventario.item_id LIMIT 0, 8 Esta query seleciona todos os itens do usuário, e já faz o stack. Por exemplo: Box 1 (23 total) Box 3 (14 total) Ao invés de ficar assim: Box 1, Box 1, Box 1, Box 1, ..., Box 1 Box 3, Box 3, ..., Box 3, Box 3 Acho que já entenderam o que eu quis dizer.. ^^ Agora, a minha dúvida é a seguinte. Na categoria Consumíveis, por exemplo, há os 3 itens que eu falei. Tipo, o item_id do item Life é 55 e a item_id do item Mana é 61, e item_id de Coins é 74. Eu preciso fazer o stack somente com o Life e o Mana. A minha lógica seria fazer assim: GROUP BY inventario.item_id NOT IN(74) Ou seja, este comando não exibiria em stack o item de id 74. Acho que deu pra entender ^^ - Stack significa compactar tudo em um só lugar, ao invés de exibir diversas vezes a mesma coisa; Obrigado gente.. espero uma resposta.. :D Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Março 13, 2013 Creio que SELECT inventario.item_id, COUNT(inventario.iid) AS total FROM inventario,itens WHERE inventario.user_id = '1' AND inventario.item_id = itens.id AND inventario.tipo = 'Box' GROUP BY inventario.item_id LIMIT 0, 8 Compartilhar este post Link para o post Compartilhar em outros sites
Good 4 Denunciar post Postado Março 18, 2013 Acho que você não entendeu.. :S você simplesmente substituiu * por inventario.item_id O que eu quero é compactar um id específico (inventario.item_id), tipo. Como mostra a imagem: Como você pode ver, eu coloquei pra não compactar a ID 74.. O resto eu coloquei tudo para compactar, como posso especificar isso? :s vlw Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Março 18, 2013 Não sei se entendi mesmo ... Mas ... SELECT inventario.item_id, COUNT(inventario.iid) AS total FROM inventario,itens WHERE inventario.user_id = '1' AND inventario.item_id = itens.id AND inventario.tipo = 'Box' AND inventario.item_id <> 74 GROUP BY inventario.item_id LIMIT 0, 8 Resolve ? ================================================ Como as imagens são montadas ? Vem do BD ? Quais são as colunas da Tabela ? Compartilhar este post Link para o post Compartilhar em outros sites
Good 4 Denunciar post Postado Março 19, 2013 Bom, esta query fez excluir a id 74 da listagem.. :S Como você pode ver na imagem.. o item de ID 82, 66, 48 e 11 ficaram em modo GROUP BY (ou seja, todos os itens com as ids ditas ficaram agrupadas, juntas..). Eu quero fazer com que na mesma query, eu possa colocar pra fazer com que a id 74 não entre no modo GROUP BY. As imagens são montadas aleatoriamente, como mostra a ilustração que fiz..As colunas da tabela nem são tão importantes, porque o resto é tudo informações sobre os itens... tipo o nome, descrição, etc.. vlw ############################################################ Pesquisei sobre GROUP BY, e vi que pode colocar um HAVING. Fica assim a query: SELECT *, COUNT(inventario.iid) AS total FROM inventario,itens WHERE inventario.user_id = '1' AND inventario.item_id = itens.id AND inventario.tipo = 'Box' GROUP BY inventario.item_id HAVING inventario.item_id IN (82,66,48,11) LIMIT 0, 8 Fazendo o HAVING, só entrará no modo GROUP BY os itens de 82,66,48 e 11. Mas, o item de ID 74 não apareceu na listagem.. :S É como se eu tivesse excluindo ele, mas acho que isso não deveria acontecer.. :s Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Março 19, 2013 A query não resolveu (excluir o 74) ? Compartilhar este post Link para o post Compartilhar em outros sites
Good 4 Denunciar post Postado Março 19, 2013 Não é excluir nenhum registro, o que quero é não deixar o id 74 entrar no GROUP BY. GROUP BY serve para AGRUPAR resultados!! Igualmente é mostrado naquela imagem que postei. Ele agrupo todas as IDs, exceto a id 74. Preciso fazer com que não agrupe uma determinada ID. ................ na primeira query que postei ele agrupa todos os itens. Preciso fazer com que não agrupe a id 74. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Março 20, 2013 inventario.id <> 74 ?! SELECT inventario.item_id, COUNT(inventario.iid) AS total FROM inventario,itens WHERE inventario.user_id = '1' AND inventario.item_id = itens.id AND inventario.tipo = 'Box' AND inventario.id <> 74 GROUP BY inventario.item_id LIMIT 0, 8 Compartilhar este post Link para o post Compartilhar em outros sites
Good 4 Denunciar post Postado Março 27, 2013 Motta, como eu tinha dito este AND inventario.id <> 74 não influenciou em nada desta vez.. :S Visto que o GROUP BY apenas agrupou todos os itens do inventário. O que eu quero é isso, resumidamente: Preciso fazer igualmente como é mostrado naquela imagem que postei. Ele agrupou todas as IDs, exceto a id 74. Preciso fazer com que não agrupe uma determinada ID. Prestando atenção na imagem, verá que agrupou todas as IDs, exceto a 74. Por exemplo, a ID 82 deveria ter listado 12 vezes o mesmo item. Mas não, pois foi agrupado e constantemente usei um COUNT para contar quantas vezes aquele registro deixou de ser repetido, ou seja, o total de itens que há no inventário. Motta, se não entendeu por favor fale como você está entendendo pra eu tentar explicar de outra maneira, pois já não sei como explicar mais. alguém ajuda.. Ninguém sabe? ^^ Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Março 27, 2013 Creio não estar entendo qual dos "ids" é preciso excluir ? inventario.item_id ? inventario.id ? para que qualquer coisa não retorne numa query só existe uma solução, colocar uma condição de exclusão (<> not in etc) na condição where. ------------------------------------------------- Ajudei ? Compartilhar este post Link para o post Compartilhar em outros sites
Good 4 Denunciar post Postado Março 27, 2013 Motta, eu não quero excluir nenhum registro. O que eu quero é AGRUPAR RESULTADOS e fazer com quê determinadas IDs não sejam AGRUPADAS.. Se fosse pra excluir eu usava NOT IN, !=, <>,... Assim como você disse. Há duas tabelas para este sistema: -> item { os campos são: id, nome, descricao, forca, agilidade, etc } inventario.item_id = significa a id do item da tabela do sistema. Onde há as informações sobre o nome, descrição, etc do item. -> inventario { os campos são: id, item_id, user_id, tipo, etc} inventario.id = significa a id do item do usuário; (essa id é só para especificar a id do item que está no inventário, tem mesma função de uma id de usuário. Por exemplo, a id deste tópico é 489368.) Bom, vamos lá novamente. Na imagem que eu postei: -> as IDs que entram no GROUP BY são 82, 66, 48 e 11. -> A ID que não entra no GROUP BY é 74. GROUP BY serve para agrupar resultados, correto? Alguém que esteja lendo este tópico também. Deu pra entender? :s Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Março 27, 2013 Excluir no caso é retirar do resultado da consulta (não apagar ou deletar).Agora, por : fazer com quê determinadas IDs não sejam AGRUPADAS. deve entender não "ler" os registros destes id 《A》ou"ler" mas ao exibir não agrupá-los ?? ou seja 82, 66, 48 e 11 sairiam agrupados e 74 sairia mas não agrupado , sairia detalhado 《B》---------------------------------------------Sendo A basta realmente incluir nowherealgo como and id <> 74 sendo B creio ser impossível. Compartilhar este post Link para o post Compartilhar em outros sites
Good 4 Denunciar post Postado Março 28, 2013 é.. excluir é retirar do resultado.. Este aqui: "ler" mas ao exibir não agrupá-los ?? ou seja 82, 66, 48 e 11 sairiam agrupados e 74 sairia mas não agrupado Preciso fazer desta maneira.. :D Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Março 28, 2013 Creio que vc terá de fazer duas queries. Compartilhar este post Link para o post Compartilhar em outros sites
Good 4 Denunciar post Postado Março 29, 2013 Como eu teria que usar 2 queries? :S não pensei nisto.. me dá exemplo.. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Março 29, 2013 Faça uma query com o agrupamento para quem é diferente de 74 e outra sem agrupar para o 74. Como são coisas distintas precisa de ter duas formas de saída na exibição. Compartilhar este post Link para o post Compartilhar em outros sites