Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Problema stringa doppioni

    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?

  2. #2
    Dicci qualche cosa di più, le descrizioni hanno un carattere terminatore particolare? Sono completamente attaccate senza spazi? Le descrizioni sono simili o identiche?

  3. #3
    Hai ragione, mi sono espresso io male. Questo è il codice che utilizzo:

    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"] . "

    "
    ;
    }

    Il problema è il seguente:

    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

  4. #4
    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"?

  5. #5
    Originariamente inviato da raven74
    utilizza il SELECT DISTINCT per ricavare titolo e descrizione
    Ho già scritto nel secondo messaggio

    "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

  6. #6
    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.
    Il database era già in questo formato, se no l'avrei fatto in questo modo:

    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

    codice:
    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'
    Con questa prima query ottengo tutti gli ID dei paesi di quella regione

    2° query

    codice:
    SELECT DISTINCT titolo,desc FROM tabella
    WHERE paesi LIKE '%$paese%'
    Ovviamente è rimasto il distinct che non funziona perchè è tutto dentro il foreach.
    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

  7. #7
    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

    codice:
    $elenco_id = (1, 34, 65, 12)
    poi fai un

    codice:
    SELECT DISTINCT titolo,desc FROM tabella
    WHERE id IN $elenco_id
    non è bellissimo ma funziona.

    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
    Con il primo metodo non funziona, la stringa che passo dentro IN contiene TUTTI gli ID dei paesi e quindi non da risultato...

    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"] . "

    ";

  8. #8
    Originariamente inviato da raven74
    Non devi mettergli gli id dei paesi, ma gli id delle descrizioni.
    Si hai ragione scusa mi sono confuso, in ogni caso ho risolto in questo modo.
    Grazie mille

    Ti inivio un messaggio privato se per te non è un disturbo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.