Так что я нашел ошибку в своем приложении, это не показало мне результата, который должен иметь. Я проследил его до следующего SQL-запроса (я удалил ненужные части).Неверный результат сравнения счетчика подзапроса MySQL
Как вы можете увидеть запрос выбирает строки из wc_hncat_products
которых соответствующие идентификаторы имеют счетчик> = 1 внутри wc_hncat_product_category_has_product
таблицы
Если я выполнить запрос с результатом подзапроса в качестве столбца, вы можете увидеть результатом является 1
. Но когда я использую его в предложении WHERE, сравнение >= 1
терпит неудачу.
Доказательство того, что подзапрос НЕ возвращают 1:
SELECT `wc_hncat_products`.`id`,
(SELECT Count(*)
FROM `wc_hncat_product_categories`
INNER JOIN `wc_hncat_product_category_has_product`
ON `wc_hncat_product_categories`.`id` =
`wc_hncat_product_category_has_product`.`category_id`
WHERE `wc_hncat_product_category_has_product`.`product_id` =
`wc_hncat_products`.`id`
AND `category_id` IN ('1')) count
FROM `wc_hncat_products`
WHERE `id` IN ('785')
Этот запрос возвращает одну строку, причем значение столбца count
равно 1
Нет результатов с сравнения счета подзапросов в ИНЕКЕ
SELECT `wc_hncat_products`.`id`
FROM `wc_hncat_products`
WHERE (SELECT Count(*)
FROM `wc_hncat_product_categories`
INNER JOIN `wc_hncat_product_category_has_product`
ON `wc_hncat_product_categories`.`id` =
`wc_hncat_product_category_has_product`.`category_id`
WHERE `wc_hncat_product_category_has_product`.`product_id` =
`wc_hncat_products`.`id`
AND `category_id` IN ('1')) >= 1
AND `id` IN ('785')
Этот запрос выбирает 0 строк. .
Как это возможно? Вы можете видеть, что счетчик фактически равен 1, но сравнение все еще не выполняется, поскольку результаты не возвращаются, а подзапросы идентичны в обоих сценариях.
Я не могу читать эти небольшие тексты изображения. – jarlh
Измените свой вопрос и прошлые вопросы в вопросе как * текст *. У вас достаточно опыта на сайте, что вы должны знать, что это хорошая идея. –
Я обновил вопрос, чтобы включить блоки кода. – Boyd