MySQL - подсчет строк и оставленной проблемы соединения

У меня есть 2 таблицы, кампании и campaign_codes:

кампании: идентификатор, partner_id, состояние

campaign_codes: идентификатор, код, состояние

Я хочу получить количество всего campaign_codes для всех кампаний, ГДЕ campaign_codes.status равняется 0 ИЛИ где нет никаких записей campaign_codes для кампании.

У меня есть следующий SQL, но конечно, ГДЕ оператор устраняет те кампании, которые не имеют никаких соответствующих записей в campaign_codes (я хочу те кампании с нулем campaign_codes также),

SELECT 
    c.id AS campaign_id, 
    COUNT(cc.id) AS code_count
FROM 
    campaigns c
LEFT JOIN campaign_codes cc on cc.campaign_id = c.id
WHERE c.partner_id = 4
AND cc.status = 0
GROUP BY c.id
11
задан k00k 2 February 2010 в 17:09
поделиться

2 ответа

Я бы выбрал что-то вроде:

SELECT 
    c.id AS campaign_id, 
    COUNT(cc.id) AS code_count
FROM 
    campaigns c
LEFT JOIN campaign_codes cc on cc.campaign_id = c.id
AND cc.status = 0 -- Having this clause in the WHERE, effectively makes this an INNER JOIN
WHERE c.partner_id = 4
GROUP BY c.id

Перемещение И в положение о присоединении делает присоединение удачным или неудачным, что очень важно, сохраняя получившиеся строки там, где нет соответствующей строки в 'правой' таблице.

Если бы это было в ГДЕ , сравнение с NULL (где нет кода campaign_code) было бы неудачным и было бы исключено из результатов.

20
ответ дан 3 December 2019 в 04:52
поделиться

Попробуйте сделать следующее:

$('table#table1 tr:last input[name=code]').val();

Или, с поправкой на код:

$('#cont').live('click', function(event) {
    var tr = $('#wr-viewcarttable tr:last');
    var itemcode = tr.find('input[name=code]').val();
    window.location = "/search?p="+itemcode;
});

В коде есть две ошибки, неправильные кавычки в части $ ("# cont ') и неправильный поиск ввода.

$(tr > 'input[name="code"]').val();

Поскольку > - это внешние кавычки, это не последовательность, а оператор сравнения, который теперь сравнивает tr с 'input [name = «code»]' . Операторы сравнения всегда возвращают логические значения (true или false), поэтому вы эффективно делаете это:

$(true).val();

Что не имеет большого смысла. При наличии объекта jQuery можно использовать метод find для поиска нижестоящих элементов этого объекта или передать элемент в качестве контекста функции $ () . Так что эти два будут работать и равны:

tr.find('input[name=code]').val();
$('input[name=code]', tr).val();

На самом деле нет причин сохранять tr в собственной переменной в вашем случае, так как вы можете получить значение только в одном объявлении, как показано выше.

-121--4244671-

Возможно, вы захотите взглянуть на Perforce. http://www.perforce.com/perforce/products.html

-121--3227040-
SELECT 
    c.id AS campaign_id, 
    COUNT(cc.id) AS code_count
FROM 
    campaigns c
LEFT JOIN campaign_codes cc on cc.campaign_id = c.id
    AND c.partner_id = 4
    AND cc.status = 0
GROUP BY c.id
3
ответ дан 3 December 2019 в 04:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: