Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

191
Visualizações
MySQL selecciona de dos tablas según múltiples condiciones en la misma tabla

Estoy tratando de crear un filtro para encontrar rápidamente el producto adecuado en función de algunas especificaciones. Pero no puedo hacer que MySQL funcione. He estado buscando en Google por un tiempo, pero no puedo encontrar una pregunta similar. Espero que puedas ayudarme.

 This is the products table -------------------- | id | name | -------------------- | 1 | Product 1 | | 2 | Product 2 | | 3 | Product 3 | -------------------- This is the relation table for the specifications -------------------------------- | id | specs_id | prod_id | -------------------------------- | 1 | 1 | 1 | | 2 | 5 | 1 | | 3 | 6 | 2 | | 4 | 9 | 3 | | 5 | 11 | 2 | ---------------------------------

Este es MySQL como quiero que funcione.

 $sql = "SELECT p.id, p.name FROM products p JOIN specs s ON p.id = s.prod_id WHERE s.specs_id = 1 AND s.specs_id = 5 AND s.specs_id = 7 GROUP BY p.id";

Este ejemplo no dará ningún resultado.

 $sql = "SELECT p.id, p.name FROM products p JOIN specs s ON p.id = s.prod_id WHERE s.specs_id = 1 AND s.specs_id = 5 GROUP BY p.id";

Esto devolverá el producto con ID 1

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Item_id no existe en su tabla. También usó AND en lugar de OR , por lo que ninguna entrada pudo coincidir. Ninguno puede tener specs_id 2,5 y 7 al mismo tiempo.

 SELECT p.id, p.name FROM products p JOIN specs s ON p.id = s.prod_id WHERE s.specs_id = 5 OR s.specs_id = 2 OR s.specs_id = 7 GROUP BY p.id;
over 4 years ago · Santiago Trujillo Relatório

0

Tal vez OR o IN es lo que está buscando:

 SELECT DISTINCT p.id, p.name FROM products p JOIN specs s ON p.id = s.prod_id WHERE s.specs_id IN (1,5);

o

 SELECT DISTINCT p.id, p.name FROM products p JOIN specs s ON p.id = s.prod_id WHERE s.specs_id=1 OR s.specs_id=5;

Además, use DISTINCT en lugar de GROUP BY si no tiene funciones agregadas.

over 4 years ago · Santiago Trujillo Relatório

0

Puede hacer como primero filtrar la tabla de specs con el specs_id requerido y luego unir ese resultado con la tabla de products .

 select p.id, p.name from (select * from products p ) p join (select * from specs where specs_id in (1,5,7)) s on p.id = s.prod_id group by p.id
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda