Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Minha consulta de produtos só retorna 5 itens, sendo que existem centenas no banco. Segue a consulta:
SELECT product.id_product, product.reference, product.price, product.active, product.quantity, product.id_category_default, lang.name AS product_name, lang.description, lang.link_rewrite AS product_link_rewrite, category.name AS category_name, category.link_rewrite AS category_link_rewrite, image.id_image, product.id_manufacturer, discount.reduction, manufacturer.name AS manufacturer_name FROM ps_product product
LEFT JOIN ps_specific_price discount ON discount.id_product=product.id_product
LEFT JOIN ps_product_lang lang ON lang.id_product=product.id_product
LEFT JOIN ps_category_lang category ON category.id_category=product.id_category_default
LEFT JOIN ps_image image ON image.id_product=product.id_product
LEFT JOIN ps_manufacturer manufacturer ON manufacturer.id_manufacturer=product.id_manufacturer
WHERE product.active=1 AND product.quantity>=1 AND product.id_category_default IN (4,5,6,65,66,90,91,53,54,48,49,50,55,62,67,68,71,19,82,88,89,87,22,24,26,74,76,77,28,78,79,97,98,99,93,96,35,36,38,39,100)
GROUP BY product.id_product ASC
Alguém pode me indicar o erro? Obrigado desde ja.
Sim, tenho centenas de produtos no banco que atendem a essas condições. Os tipos dos campos da condição são todos INT. Acredito que o erro está na condição product.id_category_default, talvez na associação do produto a categoria mas eu não identifiquei nenhum erro.
1) pq o GROUP BY product.id_product ASC
2) neste casso eu faço um select *
para um produto aleatorio (que deveria sair)
Verdade o GROUP BY não faz sentido nesse caso, removi mas mesmo assim não resolveu.
Alguns produtos saem outros não..a consulta deveria retornar mais de duzentos produtos mas retorna 5.
Esse left join na categoria que não esta indo eu acho..mas não sei onde esta o erro..
Preciso juntar a tabela category_lang (tabela das categorias) e pegar a linha onde o campo id_category_default (tabela dos produtos) bate com o campo id_category (tabela das categorias) e filtrar para que apareça somente as categorias no WHERE IN (...)
Se eu tirar a condição WHERE IN me retorna todos os produtos do banco normalmente..
Alguma idéia do que esta errado?
Obrigado pela atenção
Verifique :
product.active
product.quantit
product.id_category_default
Tipos e valores testados
Você diz fazer um select de todos os campos com essas condições?
Sim , veja se os tipos dos campos é compatível com o valor buscado no WHERE.
Exempo :
product.active é CHAR(2) com o conteúdo do tipo '01' , '02'
, testar como =1 não localiza , pouca chance de ser mas algo a olhar já que está "dando ruim"
O suspeito no caso seria o product.id_category_default
Sim os tipos são compatíveis:
active tinyint(1) id_category_default int(10) quantity int(10)
Vejamos, qual o resultado das queries abaixo.
SELECT id_category_default
FROM ps_product
WHERE id_category_default IN (
4,5,6,65,66,90,91,53,54,48,49,50,55,62,67,68,
71,19,82,88,89,87,22,24,26,74,76,77,28,78,79,
97,98,99,93,96,35,36,38,39,100
)
GROUP BY id_category_default;
SELECT id_category
Todos os produtos atendem a condição active=1 product.quantity>=1 product.id_category_default na lista passada ?
Os tipos dos campos "batem" com os tipos da condição do "where" ?