У меня есть 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
Я бы выбрал что-то вроде:
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) было бы неудачным и было бы исключено из результатов.
Попробуйте сделать следующее:
$('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
в собственной переменной в вашем случае, так как вы можете получить значение только в одном объявлении, как показано выше.
Возможно, вы захотите взглянуть на 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