Как сделать рекурсивные запросы к двум таблицам, используя базу данных web sql? - PullRequest
1 голос
/ 08 июля 2011

Я в html5-проекте, использующем базу данных web sql.

У меня есть 2 таблицы.

Таблица продуктов

  • ID
  • имя

Ценовой стол

  • ID
  • product_id
  • дата
  • цена

Товар может иметь несколько цен с разными датами.

Я пробовал что-то вроде этого:

bd.x.transaction(function (tx) {
    tx.executeSql('SELECT * FROM Products WHERE id = ?', intProductId,
        function (tx, rs) {
            if (rs.rows.length > 0) {
                var objProduct = new clsProduct();
                objProduct.setId(rs.rows.item(0).id);
                objProduct.setName(rs.rows.item(0).name);

                // Query Price Start
                bd.x.transaction(function (tx) {
                    tx.executeSql('SELECT * FROM Prices WHERE product_id = ?', intProductId,
                        function (tx, rs) {
                            var x = rs.rows.length;
                            if (x > 0) {
                                var arrResult = [];
                                for (var i = 0; i < x; i++) {
                                    arrResult[i] = new clsPrice();
                                    arrResult[i].setId(rs.rows.item(i).id);
                                    arrResult[i].setDate(rs.rows.item(i).date);
                                    arrResult[i].setPrice(rs.rows.item(i).price);
                                }

                                // set prices
                                objProduct.setPrice(arrResult);
                            }
                        },
                        bd.onError
                    );
                });
                // Query Price End
            }
        },
        bd.onError
    );
});

Проблема заключается в том, что запрос Product завершается до завершения запроса Price, а objProduct.getPrice () возвращает undefined.

Если я добавлю предупреждение в запросе цены, записи будут найдены, и я смогу увидеть результат.

Как я могу это сделать?

Спасибо.

1 Ответ

0 голосов
/ 08 июля 2011

Вы хотите использовать составной запрос, где SQL выглядит примерно так:

SELECT * FROM Products WHERE id IN (SELECT * FROM Prices WHERE product_id = ?)

Таким образом, вы просто выполняете один запрос;лучше с точки зрения SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...