Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    23

    come eliminare i doppioni

    Salve a tutti, ne capisco molto poco di PHP e anche del resto pultroppo, ho un database per l'archiviazioni dei libri con relativa ricerca, ma vorrei che la ricerca del titolo originale non mi stampasse i risultati doppi, dovuti alla stuttura del DB MSQL e dai nostri cari editori che sopratutto un tempo cambiavano il titolo all'edizione originale più volete. Questo è il codice:

    $sql="SELECT * FROM Autori INNER JOIN libri ON Autori.ID = libri.ID_Autori JOIN mese_originale ON libri.ID_mese_originale = mese_originale.ID WHERE autori LIKE
    '%".$_POST['name']."%'";
    //-run the query against the mysql query function
    $result=mysql_query($sql);
    //Guardo quante righe nel DB sono state trovate
    $numRisultati = mysql_num_rows($result);
    if($numRisultati != 0)
    { // se ho trovato almeno un risultato allora faccio partire il loop
    //-create while loop and loop through result set
    echo "TITOLI ORIGINALE:\n";
    while($row=mysql_fetch_array($result))
    {
    $autore=$row['Autori'];
    $originale=$row['Titolo_Originale'];
    $data=$row['Data_Titolo_Originale'];
    $mese_o=$row['Mese_Originale'];
    $trama_o=$row['Link_Titolo_Originale'];
    //-display the result of the array
    if ($originale != "") {
    echo "<ul>\n";
    echo "[*]"."<a href=\"$trama_o\">".$autore." - ".$originale.", ".$mese_o." ".$data."</a>\n";
    echo "[/list]";

    Come faccio a controllare che $trama non sia doppio ed evitare che mi stampi più volte il titolo originale, ho già provato SELECT DISTINCT ma non ho ottenuto il risultato sperato

  2. #2
    group by?
    Però dipende da cosa è trama...o meglio, da che tipo di campo è. Se è un int va bene, però se è un varchar(255) potrebbe non andare più bene...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    23
    Grazie per la risposta. Pultroppo è varchar(255) contiene il link alla pagina da caricare, ma il controllo si potrebbe fare anche su $originale che è il titolo originale, sono negato in php e non so proprio come farlo, per scrivere quel codice per la ricerca ci ho messo una vita, ma l'ho fatto diversi anni fa e non ricordo quasi nulla.
    Se puoi suggerirmi cosa scrivere per far vedere solo una risposta te ne sarei grato.

  4. #4
    Io farei semplicemente una subquery:
    http://database.html.it/guide/lezione/2452/le-subquery/

    select distinct * from (select * from where..)

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    23
    Ho letto il link che mi hai postato, potrebbe anche funzionare, ma non ho capito come modificare in modo corretto la riga:
    $sql="SELECT * FROM Autori INNER JOIN libri ON Autori.ID = libri.ID_Autori JOIN mese_originale ON libri.ID_mese_originale = mese_originale.ID WHERE autori LIKE '%".$_POST['name']."%'";

    I due valori che potrei controllare sono $originale o $trama_o.

  6. #6
    Puoi provare con
    codice:
    select * from tabella where campo group by titolo
    oppure

    codice:
    select distinct titolo, * from tabella where campo

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    23
    Ma non capisco, la ricerca arriva dal POST che fa una ricerca nel DB tramite il nome dell'autore. Il database è così stutturato:
    ID
    ID_Autori
    Titolo
    ID_Editore
    Collana
    Numero_Collana
    Giorno
    ID_Mese
    Anno
    Link_Titolo
    Titolo_Originale
    ID_Mese_Originale
    Data_Titolo_Originale
    Link_Titolo_Originale

    La ricerca funziona il codice non ha nulla che non va, ho solo il problema che io inserisco per il libro che in originale ha un titolo i vari titoli con cui è stato tradotto o i titoli in cui è stato diviso, io vorrei che in questa ricerca il codice controllasse che non esistano dei doppioni. In patica faccio un esempio:
    L'assedio delle tenebre è la prima parete del libro in lingua originale Wizard's First Rule
    La profezia del Mago è la seconda parete del libro in lingua originale Wizard's First Rule
    riedito in seguito con il titolo: La Spada Della Verità Vol. 1 in lingua originale Wizard's First Rule
    Avrei forse dovuto fare il database in modo diverso e fino a qui non ci piove. Ora io voglio capire è possibile con il codice che ho postato quando la ricerca arriva a quel punto eviti che mi riporti 3 volte Wizard's First Rule?
    E se si come?

  8. #8
    Aspè...quindi i tre , dei quali ne vuoi solo uno, sarebbero
    "L'assedio delle tenebre è la prima parete del libro in lingua originale Wizard's First Rule"
    "La profezia del Mago è la seconda parete del libro in lingua originale Wizard's First Rule"
    "La Spada Della Verità Vol. 1 in lingua originale Wizard's First Rule" ??
    Se è così allora non puoi farlo agilmente via query.

    A questo punto converrebbe strutturare il db con qualcosa del tipo
    id
    titolo originale
    titoli alternativi

    e quindi potresti fare un distinct, o ancora meglio
    id
    titolo originale
    id_titoli_alternativi

    così da usare una join

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    23
    La ricerca funziona per ora così, Inserisco o titolo o autore, se inserisco il titolo nel caso sopra indicato, ti dico cosa mi visualizza che forse alla fine ci capiamo
    Se cerco:
    L'assedio delle tenebre ottengo "Terry Goodkind - L'assedio delle tenebre, Il Libro d'Oro n. 103 Fanucci - 1998 (Wizard's First Rule, Agosto 1994)" e questo direi che è perfetto
    Se cerco:
    Wizard's First Rule
    ottengo:
    Terry Goodkind - Wizard's First Rule, Agosto 1994
    Terry Goodkind - Wizard's First Rule, Agosto 1994
    Terry Goodkind - Wizard's First Rule, Agosto 1994
    e questo succede per il fatto di aver preferito fare una tabella libro in meno senza creare dipensenza, per non complicarmi la vita.
    Ora posso controllare quello che c'è dentro il ciclo While ed evitare che mi stampi 3 volte la stessa cosa? Il database non posso rifarlo contiene un 10.000 titoli, e non penso di distruggerlo per sistemare come suggerisci. Ho già abbastanza Inner Join e per fare quello che dici dovrei eliminare la sezione titolo originale e poi creare la dipendenza tra un titolo in lingua originale e quello tradotto, e fin che sono 4-100 libri lo fai agilmente se iniziano ad essere 10000 impazzirei dal Form ad inserire i titoli.

  10. #10
    Bene.
    Direi che allora un group by dovrebbe andarti bene


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.