小编Whi*_*ant的帖子

从LEFT JOIN设置NULL列的默认值并使用WHERE过滤

我有一个项目表,我有一个单独的表格,其中包含每个项目的个别购买.并非每件商品都已购买.我正在选择购买计数并将其与items表连接,其语句类似于以下内容:

SELECT items.name, purchases_count
FROM `items` 
    LEFT JOIN (SELECT sales.item_name, SUM(unit_sales) AS purchases_count 
        FROM sales GROUP BY item_name) sales ON sales.item_name = items.uid
Run Code Online (Sandbox Code Playgroud)

这导致数据类似于:

+------+-----------------+
| name | purchases_count |
|------+-----------------+
| Shoe | 12              |
| Belt | NULL            |
+------+-----------------+
Run Code Online (Sandbox Code Playgroud)

当我想在上面过滤这个结果时,我的问题出现了purchases_count.如果我使用WHERE purchases_count < 10或类似的东西,根本没有销售记录的项目(即具有NULL价值的项目)将从搜索中排除.

我试图使用COALESCE(purchases_count,0) AS purchases_count哪个正确地将NULL记录设置为0,但在使用时它们仍然没有出现WHERE.我怀疑这COALESCE是在发生之后发生的WHERE.

我希望能够使用WHERE并包含NULL结果(作为零)来过滤此数字.有什么建议?

mysql sql left-join

11
推荐指数
1
解决办法
1万
查看次数

防止jQuery中的click事件多次触发

我创建了一个jQuery内容切换器.一般来说,它工作正常,但它有一个问题.如果多次单击侧面的链接,有时会显示多条内容.

问题最有可能出现在click事件中.这是代码:

$('#tab-list li a').click(
    function() {
        var targetTab = $(this).attr('href');
        if ($(targetTab).is(':hidden')) {
            $('#tab-list li').removeClass('selected');
            var targetTabLink = $(this).parents('li').eq(0);
            $(targetTabLink).addClass('selected');
            $('.tab:visible').fadeOut('slow',
                function() {
                    $(targetTab).fadeIn('slow');
                }
            );
        }
        return false;
    }
);
Run Code Online (Sandbox Code Playgroud)

我已经尝试为转换添加锁定,以便在转换发生时忽略进一步的点击,但无济于事.我还尝试使用以下内容防止在某些内容已经动画时触发转换:

if ($(':animated')) {
    // Don't do anything
}
else {
   // Do transition
}
Run Code Online (Sandbox Code Playgroud)

但它似乎总是认为事物是动画的.有什么想法可以防止多次触发动画?

javascript jquery

9
推荐指数
2
解决办法
2万
查看次数

在Ruby中合并多维哈希

我有两个哈希,其结构与此类似:

hash_a = { :a => { :b => { :c => "d" } } }
hash_b = { :a => { :b => { :x => "y" } } }
Run Code Online (Sandbox Code Playgroud)

我想将这些合并在一起以产生以下哈希:

{ :a => { :b => { :c => "d", :x => "y" } } }
Run Code Online (Sandbox Code Playgroud)

merge函数将在第一个哈希值中替换:a的值,其值为:第二个哈希值中的a.所以,我编写了自己的递归合并函数,如下所示:

def recursive_merge( merge_from, merge_to )
    merged_hash = merge_to
    first_key = merge_from.keys[0]
    if merge_to.has_key?(first_key)
        merged_hash[first_key] = recursive_merge( merge_from[first_key], merge_to[first_key] )
    else
        merged_hash[first_key] = merge_from[first_key]
    end
    merged_hash
end
Run Code Online (Sandbox Code Playgroud)

但我得到一个运行时错误:can't add a new …

ruby ruby-on-rails ruby-on-rails-3

6
推荐指数
3
解决办法
3600
查看次数