Подсчитайте 3 таблицы и проверьте в одной из них существующий идентификатор - PullRequest
0 голосов
/ 27 октября 2011

1-й запрос;обе таблицы содержат все categories_id s

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

2-й запрос;эта таблица может быть содержит 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();
    }); 
});

Итоговый результат должен генерировать что-то вроде этого (посмотрите количество пузырьков в списке).

Ответы [ 2 ]

2 голосов
/ 27 октября 2011

Этот выбор должен быть тем, что вы хотите:

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;
1 голос
/ 27 октября 2011

Попробуйте что-то вроде этого:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...