Autore Topic: Id tabella database  (Letto 279 volte)

Offline JCC

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
Id tabella database
« il: 21 Settembre 2015, 16:13:11 CEST »
0
Ciao, nel mio db ho due tabelle, la tabella A può avere da 1 a 7 records:

Tabella A
_id - campo1
1        testo
2        testo
3        testo
4        testo
5        testo
6        testo
7        testo

La tabella B è composta dall'id, dall' id della tabella A e un altro campo:

Tabella B
_id - id_tabella_A - campo3
1         2           
2         3
3         5
4         1
5         7

Ora, prelevo i dati dalle tabelle con il LEFT JOIN e in base all'id della tabella A aggiungo i giorni al calendario in questo modo:
Codice (Java): [Seleziona]
 @Override
    public List<WeekViewEvent> onMonthChange(int newYear, int newMonth) {
        List<WeekViewEvent> events = new ArrayList<WeekViewEvent>();
        SQLiteDatabase db = new DatabaseHelper(getActivity()).getReadableDatabase();
        String tabella_op = "SELECT " +
                 ....
                 ....
                "FROM Tabella a " +
                "LEFT JOIN TabellaB b ON (a._id = b.id_tabella_A) " +                
                "ORDER BY a._id ASC";
        Cursor cur = db.rawQuery(tabella_op, null);
              while (cur.moveToNext()) {
              id_a = cur.getInt(0);
              giorno_ok= cur.getInt(1);

             if (id_a == 1) {
                startTime.set(Calendar.DAY_OF_MONTH, giorno_ok);
            } else if (id_a == 2) {
                startTime.set(Calendar.DAY_OF_MONTH, giorno_ok);
                startTime.add(Calendar.DATE, 1);
            } else if (id_a == 3) {
                startTime.set(Calendar.DAY_OF_MONTH, giorno_ok);
                startTime.add(Calendar.DATE, 2);
            } else if (id_a == 4) {
                startTime.set(Calendar.DAY_OF_MONTH, giorno_ok);
                startTime.add(Calendar.DATE, 3);
            } else if (id_a == 5) {
                startTime.set(Calendar.DAY_OF_MONTH, giorno_ok);
                startTime.add(Calendar.DATE, 4);
            } else if (id_a == 6) {
                startTime.set(Calendar.DAY_OF_MONTH, giorno_ok);
                startTime.add(Calendar.DATE, 5);
            } else if (id_a == 7) {
                startTime.set(Calendar.DAY_OF_MONTH, giorno_ok);
                startTime.add(Calendar.DATE, 6);
            }

}
        cur.close();
        db.close();
       ...
       ...
    }

Tutto funziona bene, ma se nella tabella A vado ad eliminare ad esempio, il record con id = 2, poi inserisco un altro record, ovviamente l'id non sarà più in sequenza.
Come posso fare? dovrei cambiare la logica del' if-else, avete suggerimenti?
« Ultima modifica: 21 Settembre 2015, 18:25:36 CEST da JCC »

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Id tabella database
« Risposta #1 il: 21 Settembre 2015, 16:36:23 CEST »
0
Devi abilitare i foreign keys, utilizzarli nella dichiarazione della tabella e utilizzare ON DELETE CASCADE per cancellare tutte le chiavi collegate.

La documentazione  ufficiale spiega il funzionamento nei dettagli:

https://www.sqlite.org/foreignkeys.html

Inviato dal mio Nexus 5 utilizzando Tapatalk

adb logcat | tee /tmp/logcat | grep TAG

Offline JCC

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
Re:Id tabella database
« Risposta #2 il: 21 Settembre 2015, 16:45:13 CEST »
0
Forse mi sono spiegato male, non è un problema eliminare gli id delle tabelle, il problema è come aggiungere i giorni al calendario e cioè:

Se nella tabella A ci sono 4 records con id (2,3,4,5), il primo l'if-else deve considerare il primo id (cioè 2) come se fosse il primo giorno, il 3 sarà il secondo giorno e così via.

Offline xixietto

Re:Id tabella database
« Risposta #3 il: 21 Settembre 2015, 16:51:47 CEST »
0
non si capisce bene cosa vuoi fare

Offline JCC

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
Re:Id tabella database
« Risposta #4 il: 21 Settembre 2015, 17:05:30 CEST »
0
Cerco di spiegare meglio:
se l'id è = 1 aggiungo un giorno
se l'id è = 2 aggiungo due giorni
se l'id è = 3 aggiungo tre giorni
se l'id è = 4 aggiungo quattro giorni
se l'id è = 5 aggiungo cinque giorni
se l'id è = 6 aggiungo sei giorni
se l'id è = 7 aggiungo sette giorni

Il problema asce quando l'id non è in sequenza ad esempio: (1,3,5,6,7,8,9)

In pratica a prescindere dal numero dell'id, il primo deve aggiungere un giorno, il secondo id 2 giorni, il terzo id 3 giorni e così via.

Offline xixietto

Re:Id tabella database
« Risposta #5 il: 21 Settembre 2015, 17:35:26 CEST »
0
Ma XK devi eliminare gli id? Visto che ogni tuo id indica i gg

Fabrizio