Как использовать одни и те же столбцы несколько раз в состоянии где - PullRequest
0 голосов
/ 20 мая 2019

Как использовать одни и те же столбцы несколько раз, когда условие. Я хочу использовать «meta_key» и «meta_value» несколько раз. Но, к сожалению, это не работает.

Я использовал операторы левого соединения, но это не сработало.

SELECT * FROM `products` d 
JOIN (select distinct product_id from products 
    WHERE (meta_key="product_image" AND meta_value!="") 
AND
(meta_key="product_type" AND meta_value="Soap" ) 
And
user_id='6' LIMIT 10) t on d.product_id = t.product_id

Пустой результат.

Ответы [ 2 ]

2 голосов
/ 20 мая 2019

Если вы хотите получить продукты с обоими ключами,

SELECT p.*
FROM products p join
     (SELECT product_id 
      FROM cs_inventory 
      WHERE ((meta_key = 'product_image' AND meta_value <> '') OR
             (meta_key = 'product_type' AND meta_value= 'Soap' )
            ) AND
            user_id = 6
      GROUP BY product_id
      HAVING COUNT(*) = 2
      LIMIT 10
     ) i
     ON p.product_id = i.product_id;

Одна строка не может иметь несколько значений для одного столбца, поэтому ваш подзапрос никогда не вернет никакого значения.

Вместо этого он использует OR и проверяет, что обе строки доступны для продукта.

1 голос
/ 20 мая 2019

Я не совсем уверен, чего вы пытаетесь достичь, но из того, что я вижу до сих пор, вы используете требования

WHERE (meta_key = "product_image" AND meta_value != "") AND
      (meta_key = "product_type" AND meta_value = "SOAP") AND

Это прямо здесь противоречивые аргументы. meta_key не может быть одновременно product_image и product_type. Я думаю, что вы ищете OR.

WHERE (meta_key = "product_image" AND meta_value != "") OR
      (meta_key = "product_type" AND meta_value = "SOAP")

Кроме того, я не уверен, что это правильно, поскольку я сам довольно плохо знаком с SQL, но WHERE обычно следует предложению JOIN ON. Например,

 JOIN (select distinct product_id from cs_inventory) ON
      d.product_id = t.product_id
 WHERE ((meta_key = "product_image" AND meta_value != "") OR
       (meta_key = "product_type" AND meta_value = "SOAP")) AND 
       (user_id = '6')
 LIMIT 2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...