Ho una variabile $a che contiene dei dati (Per la precisione delle descrizioni). Il problema è che molte di queste descrizioni sono doppie e quindi devo farle uscire solo una volta. Come posso fare?
Ho una variabile $a che contiene dei dati (Per la precisione delle descrizioni). Il problema è che molte di queste descrizioni sono doppie e quindi devo farle uscire solo una volta. Come posso fare?
Dicci qualche cosa di più, le descrizioni hanno un carattere terminatore particolare? Sono completamente attaccate senza spazi? Le descrizioni sono simili o identiche?
Hai ragione, mi sono espresso io male. Questo è il codice che utilizzo:
Il problema è il seguente:Codice PHP:
$paesi = "";
$query = "QUERY CHE RESTITUISCE GLI ID DI TUTTI I PAESI DI UNA REGIONE";
$result = $mysqli->query($query);
while($row = $result->fetch_array(MYSQLI_ASSOC)){
$paesi .= $row["id"] . ",";
}
$paesi = explode(",",$paesi);
foreach($paesi as $paese){
$query = "QUERY PER PRENDERE LE DESCRIZIONI SOLO DI QUELLA REGIONE";
$result = $mysqli->query($query);
while($row = $result->fetch_array(MYSQLI_ASSOC)){
echo $row["titolo"] . "
" . $row["descc"] . "
";
}
}
La tabella delle descrizioni è formata così:
titolo | desc | paesi
prova | questa è una desc | 54, 66, 67, 88
Siccome il campo "paesi" è strutturato in quel modo con il foreach io passo alla query un ID alla volta che cerca nel campo "paesi". Se è presente l'ID stampa a video la riga.
Però molte righe sono doppie però hanno un diverso ID, esempio:
prova | questa è una desc | 54, 66, 67, 88
prova | questa è una desc | 54, 57, 67, 88
prova | questa è una desc | 54, 89, 67, 88
Passando alla query gli ID: 66, 57 e 89 lui automaticamente stamperà tutte e tre le righe e non va bene in quanto titolo e desc sono sempre uguali.
Ho provato anche con un select distinct nell'ultima query ma ovviamente non funziona perchè la query è dentro un foreach e quindi stampa comunque tutto.
Il risultato che dovrei ottenere nell'esempio è questo:
prova | questa è una desc
Invece ottengo:
prova | questa è una desc
prova | questa è una desc
prova | questa è una desc
Spero di esser stato chiaro![]()
L'esempio mi ha un po' confuso, mettiamo che 54=Roma, ed è presente in $paesi dopo l'explode, quando la seconda query processerà i 3 record:
prova | questa è una desc | 54, 66, 67, 88
prova | questa è una desc | 54, 57, 67, 88
prova | questa è una desc | 54, 89, 67, 88
Non avrai comunque come risultato 3 record con "prova | questa è una desc"?
Ho già scritto nel secondo messaggioOriginariamente inviato da raven74
utilizza il SELECT DISTINCT per ricavare titolo e descrizione
"Ho provato anche con un select distinct nell'ultima query ma ovviamente non funziona perchè la query è dentro un foreach e quindi stampa comunque tutto."
@valeriobb87
Prendiamo come esempio la lombardia
Milano= 98
Varese= 12
Como= 45
Sondrio= 14
I dati nella tabella
titolo1 | desc1 | 45, 13, 67, 95
titolo1 | desc1 | 42, 14, 67, 96
titolo2 | desc2 | 41, 98
Io devo stampare a video TUTTE le desc della lombardia quindi in questo caso il risultato sarà:
titolo1 | desc1 (45 = como)
titolo1 | desc1 (14= sondrio)
titolo2 | desc2 (98= milano)
Il mio problema è appunto questo, titolo1 e desc1 vengono stampati due volte perchè più località della lombardia hanno la stessa desc.
Con la distinct ripeto non funziona perchè il foreach stampa tutto.
In pratica le variabili $row["titolo"] e $row["desc"] devono vedere se ci sono contenuti doppi e stamparli solo una volta in questo caso
titolo1 | desc1
titolo2 | desc2
Il database era già in questo formato, se no l'avrei fatto in questo modo:Originariamente inviato da raven74
ma perché metti la query in un foreach.
puoi fare un'unica query che ti restituisce tutte e solo le descrizioni che ti interessano.
comunque posta le query che fai tu, altrimenti è difficile da spiegare
inoltre - consiglio personale - avere un campo che contiene valori separati da virgola non è una buona prassi quando esistono i DB relazionali apposta per gestire queste situazioni.
tabella relazione
id (desc) | id (paese)
In questo modo bastava fare tutto tramite una query con una select distinct.
Le query sono le seguenti:
1° query
Con questa prima query ottengo tutti gli ID dei paesi di quella regionecodice:SELECT paesi.id, paesi.url, paesi.nome FROM paesi INNER JOIN zonalivello2 ON paesi.zonalivello2 = zonalivello2.id INNER JOIN zonalivello1 ON zonalivello2.zonalivello1 = zonalivello1.id WHERE zonalivello1.id='ID REGIONE'
2° query
Ovviamente è rimasto il distinct che non funziona perchè è tutto dentro il foreach.codice:SELECT DISTINCT titolo,desc FROM tabella WHERE paesi LIKE '%$paese%'
Ho messo la seconda query nel foreach in modo tale che passasse un ID PAESE alla volta in modo tale che la query cerca nel paesi quell'ID
Visto che il campo paesi è nel formato seguente: 56, 45, 65, 42, ecc
Con il primo metodo non funziona, la stringa che passo dentro IN contiene TUTTI gli ID dei paesi e quindi non da risultato...Originariamente inviato da raven74
potresti fare un passaggio in più
prima recuperi tutte gli id dei paesi che ti interessano e crei una stringa che li contiene tipo
poi fai uncodice:$elenco_id = (1, 34, 65, 12)
non è bellissimo ma funziona.codice:SELECT DISTINCT titolo,desc FROM tabella WHERE id IN $elenco_id
Oppure prima di stamparle metti tutte le coppie titolo/descrizioni in un array e poi utilizzi le funzione
http://www.php.net/manual/en/function.array-unique.php
Il secondo metodo secondo me dovrebbe andare, tenendo tutta la prima parte che stampa correttamente TUTTE le desc come faccio a mettere questo dentro un array per poi stampare il tutto con la funzione array_unique?
$row["titolo"] . "
" . $row["descc"] . "
";
Si hai ragione scusa mi sono confuso, in ogni caso ho risolto in questo modo.Originariamente inviato da raven74
Non devi mettergli gli id dei paesi, ma gli id delle descrizioni.
Grazie mille
Ti inivio un messaggio privato se per te non è un disturbo