Android 中来自 JOIN 查询 SqLite 的数据的可视化
Visualization of data coming from a JOIN query SqLite in Android
在为 Android 编程时,我第一次偶然发现了使用 SqlLite 进行 INNER JOIN 的概念。
我设法找回了一些东西,但现在的问题是我想在列表中显示数据,但我无法按预期显示信息。
这是检索数据的查询
cursor = database.rawQuery("SELECT matchesbet._id, hometeam, awayteam, gamble " +
"FROM matchesbet INNER JOIN gambles ON matchesbet.idmatch = gambles.idmatch " +
"WHERE matchesbet.idbet = ? GROUP BY matchesbet.idmatch ORDER BY matchesbet._id DESC", selectionArgs);
数据用于class,它在 bindView 方法中扩展了 CursorAdapter
TextView tvGamble = (TextView) view.findViewById(R.id.gamble_text_view);
// Extract properties from cursor
int gamble = cursor.getInt(cursor.getColumnIndex("gamble"));
tvGamble.setText(String.valueOf(gamble));
现在在数据库中,我为每场比赛保存了多个 "gamble",但我唯一可以显示的是 1 次赌博。
数据库表结构和示例数据
MATCHESBET
+-----+-------+---------+----------+-----------+--+
| id | idbet | idmatch | hometeam | awayteam | |
+-----+-------+---------+----------+-----------+--+
| 349 | 3000 | 27 | TeamA | TeamZ | |
| 350 | 2456 | 39 | TeamC | TeamG | |
| 351 | 2818 | 20 | TeamW | TeamB | |
+-----+-------+---------+----------+-----------+--+
GAMBLES
+-----+---------+--------+-------+
| _id | idmatch | gamble | idbet |
+-----+---------+--------+-------+
| 349 | 27 | WIN | 3000 |
| 350 | 27 | LOST | 3000 |
| 351 | 27 | DRAW | 3000 |
| 489 | 1345 | WIN | 1981 |
+-----+---------+--------+-------+
基于上述数据,考虑到我过滤了 ID = 3000 的赌注,我想要一个包含 TeamA vs TeamZ (ID = 27) 的列表项,并且在同一行中包含字符串 WIN、LOST、DRAW。然后再次遍历所有具有 IDBET = 3000
的匹配项
我不知道如何摆脱这种情况
希望有人能帮忙
干杯
我相信你想要的很简单:-
SELECT matchesbet._id, hometeam, awayteam, group_concat(gamble) AS gamble
FROM matchesbet JOIN gambles ON gambles.idmatch = matchesbet.idmatch
WHERE matchesbet.idbet = 3000
GROUP BY matchesbet.idmatch
ORDER BY matchesbet._id DESC;
即保留 GROUP
但不是选择列 gamble
选择 group_concat(gamble) AS gamble
.
列
默认情况下,这些值由 ,
分隔。但是,您可以通过第二个参数指定另一个分隔符,例如group_concat(gamble,' - ')
会
给:-
您可能会发现此 link 有帮助 Aggregate Functions
在为 Android 编程时,我第一次偶然发现了使用 SqlLite 进行 INNER JOIN 的概念。 我设法找回了一些东西,但现在的问题是我想在列表中显示数据,但我无法按预期显示信息。
这是检索数据的查询
cursor = database.rawQuery("SELECT matchesbet._id, hometeam, awayteam, gamble " +
"FROM matchesbet INNER JOIN gambles ON matchesbet.idmatch = gambles.idmatch " +
"WHERE matchesbet.idbet = ? GROUP BY matchesbet.idmatch ORDER BY matchesbet._id DESC", selectionArgs);
数据用于class,它在 bindView 方法中扩展了 CursorAdapter
TextView tvGamble = (TextView) view.findViewById(R.id.gamble_text_view);
// Extract properties from cursor
int gamble = cursor.getInt(cursor.getColumnIndex("gamble"));
tvGamble.setText(String.valueOf(gamble));
现在在数据库中,我为每场比赛保存了多个 "gamble",但我唯一可以显示的是 1 次赌博。
数据库表结构和示例数据
MATCHESBET
+-----+-------+---------+----------+-----------+--+
| id | idbet | idmatch | hometeam | awayteam | |
+-----+-------+---------+----------+-----------+--+
| 349 | 3000 | 27 | TeamA | TeamZ | |
| 350 | 2456 | 39 | TeamC | TeamG | |
| 351 | 2818 | 20 | TeamW | TeamB | |
+-----+-------+---------+----------+-----------+--+
GAMBLES
+-----+---------+--------+-------+
| _id | idmatch | gamble | idbet |
+-----+---------+--------+-------+
| 349 | 27 | WIN | 3000 |
| 350 | 27 | LOST | 3000 |
| 351 | 27 | DRAW | 3000 |
| 489 | 1345 | WIN | 1981 |
+-----+---------+--------+-------+
基于上述数据,考虑到我过滤了 ID = 3000 的赌注,我想要一个包含 TeamA vs TeamZ (ID = 27) 的列表项,并且在同一行中包含字符串 WIN、LOST、DRAW。然后再次遍历所有具有 IDBET = 3000
的匹配项我不知道如何摆脱这种情况 希望有人能帮忙 干杯
我相信你想要的很简单:-
SELECT matchesbet._id, hometeam, awayteam, group_concat(gamble) AS gamble
FROM matchesbet JOIN gambles ON gambles.idmatch = matchesbet.idmatch
WHERE matchesbet.idbet = 3000
GROUP BY matchesbet.idmatch
ORDER BY matchesbet._id DESC;
即保留 GROUP
但不是选择列 gamble
选择 group_concat(gamble) AS gamble
.
默认情况下,这些值由 ,
分隔。但是,您可以通过第二个参数指定另一个分隔符,例如group_concat(gamble,' - ')
会
给:-
您可能会发现此 link 有帮助 Aggregate Functions