Mệnh đề GROUP BY, mệnh đề HAVING trong SQL


GROUP BY

Mệnh đề GROUP BY…được thêm vào SQL bởi vì các hàm tập hợp (như SUM) trả về một tập hợp của các giá trị trong cột mỗi khi chúng được gọi, và nếu không có GROUP BY ta không thể nào tính được tổng của các giá trị theo từng nhóm riêng lẻ trong cột.

Cú pháp của GROUP BY như sau:

SELECT tên_cột, SUM(tên_cột) FROM tên_bảng GROUP BY tên_cột

 

Ví dụ sử dụng GROUP BY:

Giả sử ta có bảng Sales như sau:

Company Amount
W3Schools 5500
IBM 4500
W3Schools 7100

Câu lệnh SQL sau:

SELECT Company, SUM(Amount) FROM Sales

sẽ trả về kết quả:

Company SUM(Amount)
W3Schools 17100
IBM 17100
W3Schools 17100

Kết quả trả về ở trên đôi khi không phải là cái mà ta mong đợi. Ta thêm mệnh đề GROUP BY vào trong câu lệnh SQL:

SELECT Company, SUM(Amount) FROM Sales
GROUP BY Company

và kết quả trả về lần này sẽ là:

Company SUM(Amount)
W3Schools 12600
IBM 4500

Kết quả này đúng là cái mà ta mong muốn.

HAVING

Mệnh đề HAVING…được thêm vào SQL vì mệnh đề WHERE không áp dụng được đối với các hàm tập hợp (như SUM). Nếu không có HAVING, ta không thể nào kiểm tra được điều kiện với các hàm tập hợp.

Cú pháp của HAVING như sau:

SELECT tên_cột, SUM(tên_cột) FROM tên_bảng
GROUP BY tên_cột
HAVING SUM(tên_cột) điều_kiện giá_trị

Ta sử dụng lại bảng Sales ở trên. Câu lệnh SQL sau:

SELECT Company, SUM(Amount) FROM Sales
GROUP BY Company
HAVING SUM(Amount) > 10000

sẽ trả về kết quả:

Company SUM(Amount)
W3Schools 12600
Advertisements

AutoSuggestion TextBox In jQuery


Introduction

AutoSuggeation shows a small window like a popup panel to the display words of the prefix typed into the TextBox. For example a country text box, that will fill in the entry India when the first letter is typed, then displays a suggestion list like a popup panel.

In this article I will explain how to create an AutoSuggestion by default in jQuery

Read more of this post

Kết quả tìm kiếm google không sử dụng Keywords Meta Tag


Google tái khẳng định không sử dụng thẻ Keywords Meta Tag để xếp hạng Pagerank Website.

Keywords Meta Tag là một thẻ Meta Tags đặc biệt, được khai báo trong phần tiêu đề (head) của mã nguồn HTML. Thẻ Keywords Meta Tag giúp cho công cụ tìm kiếm hiểu được nội dung từ khoá trên trang. Nhưng mục đích ban đầu này đã bị các Webmaster lợi dụng để nhồi nhét quá nhiều từ khoá, hoặc các từ khoá không phản ánh đúng nội dung. Ngày nay các Webmaster, đặc biệt là ở Việt Nam hiểu rất sai về cách sử dụng Keywords Meta Tag này. Và Google cũng như phần lớn các công cụ tìm kiếm khác (ngoại trừ Yahoo cho đến giờ phút này, không biết số phận ra sao sau khi liên kết với Bing) đã không còn chú trọng đến thẻ Keywords Meta Tag.
Matt Cutts, một kỹ sư phần mềm của Google thường được giới SEOWebmaster đặt cho biệt hiệu Google Guy, xác nhận rằng Keywords Meta Tag không được Google chú ý đến trong thuật toán xếp hạng của công cụ tìm kiếm.
Đây là lần thứ 2 trong một vài ngày gần đây. Một vài hôm trước, Matt cũng làm đau đầu các chuyên gia SEO khi thừa nhận Google không coi việc xác thực HTML hay CSS là tiêu chí tăng thứ hạng cho các site trên kết quả tìm kiếm của Google (Google SERPs).
Meta Tags và tiêu đề Header
Meta tags thường nằm trong phần tiêu đề (header) của tài liệu HTML, chúng thường có dạng như sau, lấy ví dụ website của vietSEO.net:
head
meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ /
titleQuảng bá Web, dịch vụ SEO, tư vấn thiết kế Website tối ưu máy tìm kiếm/title
meta name=”robots” content=”index,follow” /
meta name=”description” content=”Blog vietSEO cung cấp thông thủ thuật SEO (Search Engine Optimization)” /
meta name=”keywords” content=”SEO, vietseo, searche engine optimization, quảng bá Web” /
/head

 

Trong phần header trên, bạn có các thành phần khác nhau như sau:
Tiêu đề (Title):  Phần văn bản hiển thị trong thẻ title, thường hiển thị trong các công cụ tìm kiếm;
Phần mô tả (Description): Phần text ẩn, thường dùng để xây dựng phần mô tả trang xuất hiện trong trang kết quả tìm kiếm;
Robots:  Kết hợp với tệp tin loại trừ Robots.txt để điều chỉnh hành vi của bọ tìm kiếm trên trang.
Thẻ từ khoá (Keywords Meta Tags): Chính là phần thẻ từ khoá đề cập trong bài viết, nó không còn được sử dụng bởi Google hay Bing.
Google không sử dụng Keywords Meta Tag
Tuy Googlebot không khó khăn khi tìm kiếm các keyword theo cấu trúc trên nhưng thực ra Google không muốn như thế và thiên về index nội dung của từng bài viết để hạn chế các thủ thuật nhằm tăng thứ hạng trên Google SERPs trong khi nội dung không hề tốt.
Một vấn đề nữa là hình như  Google đang giảm nguồn lực để có thể chú tâm nhiều hơn tới chất lượng của các site chứ không coi trọng keyword nữa. Đây có thể là bước nhằm khuyến khích mọi người tự viết nội dung và tránh tình trạng sao chép và copy như hiện nay.
Google hiện tại chỉ xác nhận là không sử dụng Keywords Meta Tag, tuy nhiên các thẻ meta khác vẫn được Google coi trọng. Thẻ keyword meta tag đã từng bị Google bỏ rơi nhiều năm và Matt cũng khẳng định vẫn chưa có kế hoạc thay đổi chính sách này.Các bạn có thể theo dõi tuyên bố của Google thông qua kỹ sư Matt Cutts, Google khẳng định sử dụng hơn hai trăm thuật toán xếp hạng Website nhưng thẻ keywords meta tag không hề được Google tính đến.

Google đánh giá Keywords Meta Tag như thế nào

Kết luận của vietSEO
Việc Google không sử dụng Keywords Meta Tag không phải là điều gì đó quá mới mẻ, trong các bài viết phân tích trước đây của vietSEO, mình cũng đã đề cập tới vấn đề thẻ Keywwords Meta Tag này. Mặc dù thế, nhưng Yahoo và một số máy tìm kiếm nhỏ khác vẫn sử dụng thẻ Keywords Meta Tags này. Theo vietSEO, bạn vẫn nên khai báo thẻ Keywords Meta Tags nếu không mất quá nhiều thời gian và kỹ thuật.
Việc sử dụng Keywords Meta Tags cũng có ích nhưng có lẽ đã chuyển dịch sang hình thái Tags Cloud đặc trưng của Blogs. Đôi khi sử dụng dịch vụ của một số mạng đánh dấu xã hội (Social Bookmarking), các thẻ Keywords Meta Tags giúp các trang dịch vụ này xác định nhanh chóng từ khoá của trang, tránh việc phải nhập vào tự động. Có lẽ đó là ích lợi lớn nhất của Keywords Meta Tags mà vietSEO sử dụng cho đến giờ phút này.

Nguồn:http://m.cleverads.vn

3 ASP.NET Repeater Control Tips


The ASP.NET Repeater control is a lightweight templated data-bound list control that allows customization of your layout by repeating a specified template for each item displayed in the list. In this article, we will see 3  lesser known ASP.NET Repeater Control tips

Tip 1: Bind an ASP.NET Repeater to List<string>

Let’s first declare a List<String> for ourselves. Create an Employee and EmployeeList Class

public class Employee
{
public int EmpID { get; set; }
public string EmpName { get; set; }
}

public class EmployeeList
{
static EmployeeList()
{
emp = new List<Employee>();
emp.Add(new Employee() { EmpID = 1, EmpName = “Marshall” });
emp.Add(new Employee() { EmpID = 2, EmpName = “Matt Damon” });
emp.Add(new Employee() { EmpID = 3, EmpName = “Larry King” });
}
public static List<Employee> emp { get; set; }
}

We have an EmployeeList exposed  through a get/set property public static List<Employee> emp { get; set; }. This allows us to consume this List<> using a LINQDataSource, which expects the TableName to be a property, in our case ’emp’.

Now declare a Repeater control with two columns to display this data:

<form id=”form1″ runat=”server”>
<div>
<asp:Repeater ID=”rptName” runat=”server”>
<HeaderTemplate>
<table>
<tr>
<th>EmployeeID</th>
<th>EmployeeName</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<%# ((Employee)Container.DataItem).EmpID %>
</td>
<td>
<%# ((Employee)Container.DataItem).EmpName %>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table><br />
</FooterTemplate>
</asp:Repeater>
</div>
</form>

The <ItemTemplate> defines how items in the Repeater control are displayed. The most important step is to cast the Container.DataItem object to the ‘Employee’ type.

In the code behind Page_Load, bind the Repeater to the List<Employee> as shown below:

protected void Page_Load(object sender, EventArgs e)
{
rptName.DataSource = EmployeeList.emp;
rptName.DataBind();
}

and there you go. Your Repeater control is bound to a List<string>
image
Tip 2: Programmatically access a CheckBox inside a Repeater

Let us say you have a CheckBox defined inside a Repeater control

<asp:Repeater id=”rptName” runat=”server”>
<li><asp:checkbox id=”chkbox” runat=”server />
<input type=”checkbox” id=”<%# Container.DataItem %>”/>
</asp:Repeater>

To access this checkbox programmatically and print it’s value for each row generated, use this code in the rptName_ItemDataBound() event. Here we are assuming that the ‘married’ property is been bound to the CheckBox.

foreach (RepeaterItem item in rptName.Items)
{
CheckBox cb = item.FindControl(“chkbox”) as CheckBox;
if (cb.Checked)
{
Response.Write(“Status: ” + cb.Attributes[“married”].ToString() + “< br />”);
}
}

Tip 3: Binding a DropDownList control inside a Repeater

I have usually found developers binding the DropDownList inside the Repeater_ItemDataBound property of the Repeater Control. Ideally control databinding must be done at the Control level, rather than the Parent level. Here’s how

Let’s assume the following dropdownlist control is defined in the ItemTemplate of the Repeater

<asp:DropDownList ID=”ddlRating” runat=”server”
AutoPostBack=”true” EnableViewState=”false”>
</asp:DropDownList>
</td>

To populate this control, add an OnDataBinding event as shown below

<asp:DropDownList ID=”ddlCities” runat=”server”
AutoPostBack=”true” EnableViewState=”false”
OnDataBinding=”ddlCities_DataBinding”>
</asp:DropDownList>

and code the DataBinding event

protected void ddlCities_DataBinding(object sender, System.EventArgs e)
{
// populate DDL control here
}

 

Theo devcury

Gọi Ajax Cross-Domain với JSONP


SONP là gì?

Khi bạn sử dụng Ajax bạn không thể gọi sang domain khác (cross domain), để giải quyết vấn đề này bạn có thể sử dụng Proxy để lấy dữ liệu từ server/domain khác sau đó trả về cho server/domain hiện tại nhưng bạn sẽ gặp khó khăn trong việc gọi dữ liệu.

JSONP hoặc JSON with Padding là phương thức dùng để gọi sang server/domain khác (cross domain), dùng JSONP bạn có thể lấy dữ liệu từ server/domain khác để trả về cho client mà không cần phải dùng proxy server.

Bạn có thể đọc thêm về JSONP ở đây

Trả về 1 loạt ảnh từ API của Flickr với JSONP (ví dụ tôi lấy ở trang jquery)

<!DOCTYPE html>
<html>
<head>
  <style>img{ height: 100px; float: left; }</style>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<div id="images"></div>

<script>
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?",
  {
    tags: "cat",
    tagmode: "any",
    format: "json"
  },
  function(data) {
    $.each(data.items, function(i,item){
      $("<img/>").attr("src", item.media.m).appendTo("#images");
      if ( i == 3 ) return false;
    });
  });
</script>

</body>
</html>

trong đoạn code trên bạn có thể để ý đến Request Url của tôi có thêm jsoncallback=?
khi bạn sử dụng JSONP thì bạn bắt buộc phải có param này.
http://api.jquery.com/jQuery.getJSON/

Tự động resize ảnh trong nội dung bài viết


Khi bạn đăng 1 ảnh lên blog hoặc diễn đàn bạn sẽ gặp ngay phải vấn đề đó là ảnh của bạn quá to so với
kích cỡ nội dung của blog diễn đàn đó dẫn đến ảnh sẽ bị “chửa” ra ngoài nhìn rất mất thẩm mĩ hoặc tệ hơn
là một phần của bức ảnh sẽ “bị mất” do phần tử cha được gán overflow:hidden

Để giải quyết vấn đề này nếu bạn là Webmaster bạn cần phải sử lý:

1. Đưa ảnh về đúng kích cỡ
2. Giữ lại Aspect Ratio (tỷ lệ) của bức ảnh đó để ảnh không bị méo

bạn có thể code css như sau:

Tại thẻ div Container (chứa ảnh) viết cho thẻ img

divContainer img {

    max-width: 550px;
    height: auto !important;
    width: expression(this.width > 550 ? 550: true);
}

max-width: 550px chiều rộng tối đa của ảnh là 550px
height: auto tự động co giãn chiều cao để phù hợp với tỷ lệ bức ảnh

 

Hoặc để đơn giản như  sau:

 

#divContainer img {
max-width: 95%;

}

Để ở 95% vì không muốn hình ảnh đầy form, gây xấu, các bạn có thể để 100% tùy vào nhu cầu

Như vậy khi đưa lên bất kỳ ảnh nào trong thẻ div Container sẽ bị resize về cỡ 550px tuy nhiên code trên mới
chỉ chạy được trên: Firefox 3.0 trở lên, Opera 10, IE 7 trở lên, Google Chrome, Safari 4

IE 6 không hỗ trợ.

Bạn thường viết web Control như thế nào?


Cách 1: Tôi tạo ra một trang abc.ASPX với file code là abc.ASPX.cs, rồi viết code xử lý với các control vào trang này, thế là xong. Tôi thấy bạn tôi làm thế, thầy tôi dạy tôi thế, nhiều công ty nhỏ làm thế, khỏi phải suy nghĩ nhiều. Cần gì chỉnh sửa giao diện thì vào trang code ấy mà sửa, vừa tiện lợi.
Read more of this post