|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: May 2000
Messaggi: 6087
|
[PHP] Tabella dati ridondanti. Come eliminarli?
Buongiorno,
ho una tabella con dei dati che stampo tranquillamente. Sono tutti record unici e indipendenti, ma ogni tanto una riga è vincolata a quella immediatamente dopo avendo una parte di dati comuni e altri in più. Quando stampo, stampo tutto, quindi in quei casi in cui ci sono rihhe dipendenti a due a due, ho una ridondanza di informazioni. Il punto è che non ho trovato un modo per stampare solo la riga che contiene tutte le info (quelle comuni e quelle esclusive). avete una idea? Grazie.
__________________
PSN: jNash08 "Iddu pensa sulu a iddu..." (cit.) ![]() ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: May 2000
Messaggi: 6087
|
Ecco un es.:
... 5- 01 8:00 I CASA 0 4- 01 7:50 I CASA 1 3- 01 7:50 I CASA 0 2- 01 7:45 I CASA 0 1- 01 7:30 I CASa 0 ... In pratica, le righe 3 e 4 dovrebbero essere unificate, perché è una ripetizione inutile! Il punto è che una volta stampata la 3, solo dopo mi "accorgo" della 4 (è un array), cioè del fatto che sono due righe da unire! Solo che ormai la 3 è stampata in tabella e non riesco più a farci nulla! Chiaro più o meno?
__________________
PSN: jNash08 "Iddu pensa sulu a iddu..." (cit.) ![]() ![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Non si capisce molto dall'esempio in questione. Comunque, io penso che non puoi far dipende una riga dalla riga successiva, è una cosa che non ha senso. Puoi avere solo dati che dipendono da altri dati all'interno della riga stessa, al massimo. Probabilmente devi solo splittare quella tabella in due tabelle, ma non avendo capito l'esempio non riesco ad aiutarti più di così. Comunque credo sia un problema di design del database, non lo risolverei tramite PHP.
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: May 2000
Messaggi: 6087
|
Non ha senso? I dati sono quelli, non si scappa! Il mio approccio è sicuramente errato, perché una volta stampata una riga no posso fare più nulla a quei dati e quindi la riga dopo per forza è ridondante! Splittare le tabelle potrebbe essere una soluzione, ma non proprio semplice... I dati li leggo tramite php, perché il db si popola in un'altra fase.
Inviato da Huawei mobile
__________________
PSN: jNash08 "Iddu pensa sulu a iddu..." (cit.) ![]() ![]() |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Feb 2004
Città: milano
Messaggi: 2148
|
Ciao,
scusa ma quale è il campo che ti permette di capire se aggregare o no? Intervieni sul quello durante il primo print...ti metti tutto in un array temporaneo e stampi poi quello se hai aggregato o meno... |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: May 2000
Messaggi: 6087
|
Quote:
Questo mi fa capire che la precedente (3) e la corrente (4) devono essere unite.
__________________
PSN: jNash08 "Iddu pensa sulu a iddu..." (cit.) ![]() ![]() |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Feb 2004
Città: milano
Messaggi: 2148
|
Beh ma allora è più facile di come pensi:
leggi la prima riga dal DB e la metti in un array con due righe...leggi la seconda e la metti nell'array, confronti il valore 0 , 1. Se nella seconda riga del tuo array di stampa c'é 1 aggreghi se no stampi le due righe. Resetti l'array e continui così per tutti i record del DB. |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Secondo me è sbagliato risolvere da Php. Risolvi ma avrai della computazione in più per nulla, che se il db fosse a posto non avresti. Senza contare i dati ridondanti nel db appunto.
|
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Feb 2004
Città: milano
Messaggi: 2148
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: May 2000
Messaggi: 6087
|
Quote:
Sicuramente si possono "lavorare" prima di popolare il DB, ma attualmente il flusso di dati non viene "sistemato" prima.
__________________
PSN: jNash08 "Iddu pensa sulu a iddu..." (cit.) ![]() ![]() |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
La situazione non mi è del tutto chiara, non potresti fare semplicemente una group by nella select?
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: May 2000
Messaggi: 6087
|
Dunque, la primaria è un ID che non utilizzo.
Vi è una chiave unica che raccoglie tutte le variabili (a parte ID, naturalmente)...questo per evitare di memorizzare records doppi che possono passare...Tabella unica, non legata ad altre. Ho capito che non devo stampare ad ogni iterazione dell'array, ma appunto "memorizzare" per poi controllare le righe accoppiate, fare le dovute sistemazioni e poi stampare. Però è più facile a dirsi che a farsi... ![]()
__________________
PSN: jNash08 "Iddu pensa sulu a iddu..." (cit.) ![]() ![]() |
![]() |
![]() |
![]() |
#13 | |
Member
Iscritto dal: Oct 2003
Messaggi: 143
|
Quote:
Se si, puoi agire così ed eliminare quella con valore 0 e mantenere quella con valore 1: http://viper-7.com/R7lEgd |
|
![]() |
![]() |
![]() |
#14 | |||
Senior Member
Iscritto dal: May 2000
Messaggi: 6087
|
Quote:
Guardo il tuo esempio. Grazie. Ho visto...se però la base di partenza è Quote:
Quote:
Posso avere n righe da "unificare"...tenendo sempre quella col valore $v[4] == 1.
__________________
PSN: jNash08 "Iddu pensa sulu a iddu..." (cit.) ![]() ![]() Ultima modifica di Gregor : 09-10-2014 alle 09:12. |
|||
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Feb 2004
Città: milano
Messaggi: 2148
|
Se vuoi unificare via php devi stampare a due a due...come ti ho detto di fare io
![]() Hai bisogno di un array temporaneo di stampa. Metti dentro una riga (0), metti dentro la seconda (0). Le stampi. Resetti l'array. Metti dentro una riga (0), metti dentro la seconda (1). Aggreghi e stampi. Resetti ecc. |
![]() |
![]() |
![]() |
#16 | |
Member
Iscritto dal: Oct 2003
Messaggi: 143
|
Quote:
http://viper-7.com/lGGkGb |
|
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Ma scusa, se a te interessa che quelle con 1 finale sovrascrivano 0 finale, anziché salvare entrambe le righe nel db, non puoi andare in update sulla riga e salvare 1? Così ti estrai le righe giuste e in Php non devi fare nulla. E non hai neanche duplicati sul db.
|
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: May 2000
Messaggi: 6087
|
Le righe doppie mi servono in altri ambiti e quindi nel db devono restare. Una select che per le righe "doppie" prende solo quelle con valore 1 ci può stare. Forse una select concatenata... Devo prenderle tutte le altre. Le altre soluzioni mi sembrano complicate...
Inviato da Huawei mobile con Tapatalk
__________________
PSN: jNash08 "Iddu pensa sulu a iddu..." (cit.) ![]() ![]() |
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: May 2000
Messaggi: 6087
|
Sto seguendo la strada di @MicheleRaponi che mi sembra semplice per le mie conoscenze di php.
Questa la partenza; il mio array nasce così: Stampo tutte le righe: Codice PHP:
Ho un array con le righe da non stampare... Codice PHP:
Codice PHP:
__________________
PSN: jNash08 "Iddu pensa sulu a iddu..." (cit.) ![]() ![]() Ultima modifica di Gregor : 14-10-2014 alle 09:20. |
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: May 2000
Messaggi: 6087
|
Non ci sono ancora!
Codice PHP:
Partendo dalla prima (0) all'ultima, ho il numero esatto di ciò che non mi serve! Adesso devo ripartire da un for analogo, dove stamperò tutte le righe da 0 ad $AffectedRows ad eccezione di quelle nell'array precedente...
__________________
PSN: jNash08 "Iddu pensa sulu a iddu..." (cit.) ![]() ![]() Ultima modifica di Gregor : 14-10-2014 alle 10:50. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:18.