查询同步数据库列与一周中的几天

时间:2015-04-09 22:56:02

标签: android mysql sqlite

我正在做一个android工作室项目,我正在使用SQLite数据库。在应用程序中,我允许用户输入当天的卡路里摄入量。

数据库将有相应的列来保存当天的用户卡路里摄入量。 星期一卡路里摄入量将保存在Monday_Cal列中。

编辑: 该应用程序在数据库中有两个表; 1存储用户详细信息,所需卡路里和Mon_Cal等.2存储产品详细信息和卡路里量。用户选择产品并将卡路里添加到总数中。

例如,

我的问题是如何使输入卡路里的列改变以匹配日期

例如:

当星期一结束时,选择的列从Monday_Cal更改为Tuesday_Cal。

我原来的计划是一个简单的if语句,我推测有些东西我可以打电话(时钟或日历)然而我无法在该区域找到任何材料或教程我认为我可能会搜索错误的短语?如果这种方式无法实现,还有其他选择。

2 个答案:

答案 0 :(得分:0)

您真的不希望将各个日期存储为用户表中的字段。如果您只存储Mon-Sun,那么您只能将自己限制为每人保留7天的历史记录。

更好的解决方案是将卡路里摄入量分离到自己的表中,该表与用户表相关,如下所示:

create table calorie_intake(
  user_id integer not null,
  intake_date date,
  calories integer,
  primary key(user_id, intake_date),
  foreign key (user_id) references users(id)
);

此架构使用id表的users字段来创建关系。要查找特定日期的用户卡路里摄入量,您可以执行类似于以下内容的查询:

select calories
  from users u
    inner join calorie_intake i
      on u.id = i.user_id
    where u.id = 1
      and intake_date = '2015-04-10';

将于2015年4月10日为身份1的用户提供卡路里摄入量。

这个创建关系并远离一个表格中的所有数据的过程'设计被称为规范化,关于这个主题有很多信息,如果你要完成任何数据库工作,那么你就是在不知道这个概念的情况下拍摄自己。 heres a link to get started

答案 1 :(得分:0)

沿着这些方向做点什么

数据库处理器:

//DATABASE NAME
private static final String DATABASE_NAME = "AppDatabase";
//USER TABLE
private static final String TABLE_USERS = "Users_Table";
private static final String KEY_U_ID = "User_ID";
private static final String KEY_USERNAME = "Username";
private static final String KEY_PASSWORD = "Password";
private static final String KEY_AGE = "Age";
private static final String KEY_EMAIL = "Email";
private static final String KEY_GENDER = "Gender";
private static final String KEY_HEIGHT = "Height";
private static final String KEY_WEIGHT = "Weight";
private static final String KEY_BMI = "BMI";
private static final String KEY_BMR = "BMR";

//PRODUCT TABLE
private static final String TABLE_PRODUCTS = "Products_Table";
private static final String KEY_PRODUCT_ID = "Product_ID";
private static final String KEY_ITEMNAME = "Item_name";
private static final String KEY_ITEMCALORIES = "Item_Calories";

//CALORIEINTAKE TABLE
private static final String TABLE_CALORIE_INTAKE = "CalorieIntake_Table";
private static final String KEY_USER_ID = "USER_ID";
private static final String KEY_INTAKE_DATE = "Intake_Date";
private static final String KEY_CALORIES = "Calories";


//
private static final String CREATE_USER_TABLE = "CREATE TABLE " + TABLE_USERS + "( "
        + KEY_U_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
        + KEY_USERNAME + " TEXT, "
        + KEY_PASSWORD + " TEXT, "
        + KEY_AGE + " INTEGER, "
        + KEY_EMAIL + " TEXT, "
        + KEY_GENDER + " TEXT, "
        + KEY_HEIGHT + " DOUBLE, "
        + KEY_WEIGHT + " DOUBLE, "
        + KEY_BMI + " DOUBLE, "
        + KEY_BMR + " DOUBLE ); ";

private static final String CREATE_PRODUCT_TABLE = "CREATE TABLE " + TABLE_PRODUCTS + "( " + KEY_PRODUCT_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
        + KEY_ITEMNAME + " TEXT, "
        + KEY_ITEMCALORIES + " DOUBLE );";

private static final String CREATE_CALORIE_INTAKE_TABLE = "CREATE TABLE " + TABLE_CALORIE_INTAKE + " ( " + KEY_USER_ID + " INTEGER NOT NULL, "
        + KEY_INTAKE_DATE + " DATE, " + KEY_CALORIES + " INTEGER, PRIMARY KEY( " + KEY_USER_ID + ", " + KEY_INTAKE_DATE + " ), FOREIGN KEY ( " 
        + KEY_USER_ID + " ) REFERENCES " + TABLE_USERS + " ( " + KEY_U_ID + " ));";

userintake查询:

 public CalorieIntake getuserIntake(int id) {
    CalorieIntake calorieIntake = null;
    SQLiteDatabase db = getReadableDatabase();
    String[] projection = {KEY_CALORIES};
    String[] selectionargs = {String.valueOf(id)};
    String selection = KEY_U_ID + " =?";
    Cursor cursor = db.query(TABLE_USERS + " INNER JOIN " + TABLE_CALORIE_INTAKE + " ON " + KEY_U_ID + " = " + KEY_USER_ID, projection, selection,
            selectionargs, null, null, null);
    if (cursor != null && cursor.getCount() > 0) {
        cursor.moveToFirst();
        calorieIntake = new CalorieIntake(cursor.getInt(0), null, cursor.getDouble(2));


    }
    return calorieIntake;
}