2011-10-26 35 views
0

第一个查询;两个表都包含全部categories_id s计数3个表格并检查其中一个是否存在ID

SELECT 
* 
FROM 
categories c, 
categories_description cd 
WHERE c.categories_id = cd.categories_id 
ORDER BY sort_order, cd.categories_name 

第二查询;此表也许举行categories_id

SELECT 
count(*) 
AS total 
FROM 
products_to_categories 
WHERE 
categories_id = "'+ catid +'"' 

我需要一种方法来排第一个查询所有类别(做一个列表),并给我在第二个查询是/否或0/1一个SQL查询。

结果是这样的:

categories_id | categories_name | total(*) 
    1   | categorie1 | 21  
    2   | categorie2 | 0 (if categories_id in 'products_to_categories' does not exist 

我需要它在下面的代码:

var dbSize = 5 * 1024 * 1024; // 5MB 
var db = openDatabase("Oscommerce", "1.0", "Oscommerce Database", dbSize); 

var categories={}; 

var list_str = ''; 
db.transaction(function (tx) { 
    tx.executeSql('SELECT * FROM categories c,categories_description cd WHERE c.categories_id = cd.categories_id ORDER BY categories_id', [], function (tx, results) { 
     list_str += '<ul data-role="listview" data-inset="true" data-theme="d">'; 
     var len = results.rows.length, i; 

     for (i = 0; i < len; i++) { 
      var r = results.rows.item(i); 
      categories[r.categories_id] = r; 
     } 
     for(key in categories) 
     { 
      var parent = 0; 
      var value=categories[key]; 
      catId = value['categories_id']; 
      catName = value['categories_name']; 
      catImage = value['categories_image']; 
      parentId = value['parent_id']; 
      if (parentId == parent) 
      { 
       list_str += '<li id="'+ catId +'"><a class="parentlink" parentid="'+ parentId +'" catid="'+ catId +'" catname="'+ catName +'"><h3>' + catName + '</h3><p>' + catImage + '</p></a></li>'; 
       ///i need to do an else around here if the rowed list has products 
      } 
     } 
     list_str += '</ul>'; 

     $('#parents').html(list_str).find('ul').listview(); 
    }); 
}); 

总产量应该产生什么like this(观看列表中的计数气泡)。

回答

2

这个选择应该是你想要什么:

SELECT 
c.categories_id, cd.categories_name, 
case when aa.total_per_id is null then 0 
    else aa.total_per_id 
end as total 
FROM categories as c 
    join categories_description as cd on c.categories_id = cd.categories_id 
    left join (
    select a.categories_id, 
    count(*) as total_per_id from product_to_categories a 
    group by a.categories_id) as aa on aa.categories_id = c.categories_id 
ORDER BY c.sort_order, cd.categories_name; 
+0

你现在做了一个虚拟表与上述查询? – wHiTeHaT

+0

@wHiTeHaT不,我不知道。什么是*虚拟桌面*? –

+0

查询不起作用 – wHiTeHaT

1

试试这样的事情:

select 
    c.categories_id, 
    cd.categories_name, 
    count(p2c.categories_id) as total 
from 
    categories c 
    join categories_description cd 
    on c.categories_id = cd.categories_id 
    left join product_to_categories p2c 
    on p2c.categories_id = c.categories_id 
    group by 
    c.categories_id, 
    cd.categories_name 
    order by c.sort_order, cd.categories_name 
+1

正是我所要写,但第一个加入应该是一个内部联接,而第二个连接需要是左连接,并且您可能需要保留order by子句。 – Neil

+0

@尼尔好点,尼尔。我确实已经忘记了那次左路加入,但我当然希望它在那里!更新我的查询。 –

+0

@Piotr,您的查询只会提取包含产品的类别,而不是所有类别 – wHiTeHaT

相关问题