Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.224.32.86] |
|
Данный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. |
Сообщ.
#1
,
|
|
|
Здравствуйте!
Я только начал изучать sql, а точнее программирование под андроид. Использую sqlite. Такая база: BEGIN TRANSACTION; CREATE TABLE exercise (_id integer primary key autoincrement,name text,parent integer); CREATE TABLE data (_id integer primary key autoincrement,pod integer, up integer, adate integer, weight real, repeat integer); INSERT INTO "exercise" VALUES(1,'Понедельник',0); INSERT INTO "exercise" VALUES(2,'Группа 1',1); INSERT INTO "exercise" VALUES(3,'ааа',2); INSERT INTO "exercise" VALUES(4,'ббб',2); INSERT INTO "exercise" VALUES(5,'ввв',2); INSERT INTO "exercise" VALUES(6,'Группа 2',1); INSERT INTO "exercise" VALUES(8,'ццц',6); INSERT INTO "data" VALUES(9,1,3,1459137600,5.0,10); INSERT INTO "data" VALUES(10,2,3,1459137600,7.5,10); INSERT INTO "data" VALUES(11,3,3,1459137600,10.0,8); INSERT INTO "data" VALUES(12,4,3,1459137600,12.5,8); INSERT INTO "data" VALUES(13,5,3,1459137600,15.0,6); INSERT INTO "data" VALUES(14,1,4,1459137600,1.25,10); INSERT INTO "data" VALUES(15,2,4,1459137600,2.5,10); INSERT INTO "data" VALUES(16,3,4,1459137600,3.75,10); INSERT INTO "data" VALUES(17,4,4,1459137600,5.0,10); INSERT INTO "data" VALUES(18,1,3,1459742400,5.0,10); INSERT INTO "data" VALUES(19,2,3,1459742400,7.5,10); INSERT INTO "data" VALUES(20,3,3,1459742400,10.0,10); INSERT INTO "data" VALUES(21,4,3,1459742400,12.5,10); INSERT INTO "data" VALUES(22,5,3,1459742400,15.0,8); INSERT INTO "data" VALUES(23,1,4,1459742400,2.5,10); INSERT INTO "data" VALUES(24,2,4,1459742400,3.75,10); INSERT INTO "data" VALUES(25,3,4,1459742400,5.0,10); INSERT INTO "data" VALUES(26,4,4,1459742400,6.25,10); INSERT INTO "data" VALUES(27,1,3,1460347200,83.75,10); INSERT INTO "data" VALUES(28,2,3,1460347200,7.5,10); INSERT INTO "data" VALUES(29,3,3,1460347200,11.0,10); INSERT INTO "data" VALUES(30,4,3,1460347200,12.5,10); INSERT INTO "data" VALUES(31,5,3,1460347200,17.5,10); INSERT INTO "data" VALUES(32,1,4,1460347200,3.75,10); INSERT INTO "data" VALUES(33,2,4,1460347200,5.0,10); INSERT INTO "data" VALUES(34,3,4,1460347200,6.25,10); INSERT INTO "data" VALUES(35,4,4,1460347200,7.5,10); INSERT INTO "data" VALUES(39,6,3,1460347200,25.0,1); INSERT INTO "data" VALUES(40,7,3,1460347200,375.0,1); COMMIT; Длинное число (1460347200) - это дата. Смысл в том, что для каждого дня недели есть набор групп, в каждой группе - набор элементов. Для каждого элемента я задаю набор параметров, которые хранятся в таблице data и нумеруются полем pod (1,2,3...) На экране в моей программе я вижу список элементов групп, нажимая на элемент, я попадаю на экран, где ввожу данные. После ввода возвращаюсь к списку. И там я должен увидеть, что для определенной группы я сегодня ввел данные, т.е. какую-нибудь маркировку. Но это предисловие. чтобы увидеть список, я делаю запрос: String sql = "SELECT id, name, visiblity FROM exercise WHERE parent = ? AND visiblity = 1; db.rawQuery(sql, new String[] { Integer.toString(id) }); Но это без маркировки. Чтобы сделать маркировку, я хочу в запросе получать кроме тех полей, что я ввел еще одно поле, в котором будет значение (флаг,признак), что в таблице data есть запись с сегодняшней датой для заданного элемента. Я попробовал сделать что-то типа того: String sql = "SELECT exercise._id, name, adate FROM exercise LEFT OUTER JOIN data on exercise._id = data.up WHERE parent = ? AND visiblity = 1 AND (pod = 1 OR podhod is null) AND (adate = ? OR adate is null)"; db.rawQuery(sql, new String[] { Integer.toString(id), Integer.toString(tekDate) }); Таким образом я хотел получить список элементов заданной группы (_id, name) и еще поле adate с сегодняшней датой или null, если ее нет. Но получилось не то. В принципе мне не важно, что будет в поле adate: дата или null, 0 или 1, или еще что-то, главное чтобы это трактовать как true или false. |
Сообщ.
#2
,
|
|
|
Поля таблицы exercise надо перенести из фильтра в условие связи. Но там есть параметер. Я не знаю как ето заимплементировать в SqlLite
... on exercise._id = data.up AND parent = ? WHERE visiblity = 1 ... |
Сообщ.
#3
,
|
|
|
Сделал так:
String SUBSQL = "(SELECT adate from data WHERE exercise._id = data.up " + "AND pod = 1 AND adate = " + Integer.toString(tekDate) + ")"; String SQL = "SELECT _id, name, visiblity, " + SUBSQL + " as dat FROM exercise WHERE parent = ? AND visiblity = 1;"; db.rawQuery(SQL, new String[] { Integer.toString(id) }); поле dat возвращает либо текущую дату (тогда я понимаю, что она есть), либо null (тогда я понимаю, что ее нет). |