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

    Evitare contenuti duplicati se appartenenti a categorie diverse

    Ciao a tutti,
    ho questo dilemma che non riesco a risolvere:

    Vorrei evitare contenuti duplicati se appartenenti a categorie diverse,
    ovvero:

    Ho una struttura DATABASE di questo tipo:
    4 tabelle:

    autori
    categorie
    testi
    categoriatesto

    (che e' una JOIN table)


    Codice PHP:
    $lista = @mysql_query(
        
    'SELECT  DISTINCT text, nome, email, nomecat, autori.id,  titolo
        FROM testi, autori, categorie  WHERE authorid=authorid'
    );
    if (!
    $lista) {
      exit(
    '

    Error performing query: ' 
    mysql_error() . '</p>');
    }

    while (
    $testi mysql_fetch_array($lista)) {
      
    $text $testi['text'];
      
    $name $testi['nome'];
      
    $email $testi['email'];
      
    $nomecat $testi['nomecat'];
      
    $titolo $testi['titolo'];
        

      echo 
    "$titolo $email $name  $nomecat
    .
          
    "$text";

    Ma mi restituisce lo stesso testo 2 volte quando appartenenet a 2 categorie diverse,ad es:

    TESTO 1 CAT 1
    TESTO 2 CAT 2
    TESTO 3 CAT 1
    TESTO 1 CAT 2


    COME POSSO FARE INVECE PER OTTENERE :
    TESTO 1 CAT 1 - CAT 2 ?

    GRAZIE MILLE A TUTTI!

    Gyra

    E auguri di buon anno!

  2. #2
    se posti le strutture delle tabelle diventa più semplice

  3. #3
    Certo !



    codice:
    CREATE TABLE `autori` (
      `id` int(11) NOT NULL auto_increment,
      `nome` varchar(255) default NULL,
      `email` varchar(255) default NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
    
    
    CREATE TABLE `categoriatesto` (
      `testoid` int(11) NOT NULL default '0',
      `categoriaid` int(11) NOT NULL default '0',
      PRIMARY KEY  (`testoid`,`categoriaid`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    
    
    CREATE TABLE `categorie` (
      `id` int(11) NOT NULL auto_increment,
      `nomecat` varchar(255) default NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
    
    
    CREATE TABLE `testi` (
      `id` int(11) NOT NULL auto_increment,
      `text` text,
      `date` date NOT NULL default '0000-00-00',
      `authorid` int(11) default NULL,
      `titolo` text,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=33 ;

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    157

    Re: Evitare contenuti duplicati se appartenenti a categorie diverse

    Originariamente inviato da gyra
    Ciao a tutti,
    ho questo dilemma che non riesco a risolvere:

    Vorrei evitare contenuti duplicati se appartenenti a categorie diverse,
    ovvero:

    Ho una struttura DATABASE di questo tipo:
    4 tabelle:

    autori
    categorie
    testi
    categoriatesto

    (che e' una JOIN table)


    Codice PHP:
    $lista = @mysql_query(
        
    'SELECT  DISTINCT text, nome, email, nomecat, autori.id,  titolo
        FROM testi, autori, categorie  WHERE authorid=authorid'
    );
    if (!
    $lista) {
      exit(
    '

    Error performing query: ' 
    mysql_error() . '</p>');
    }

    while (
    $testi mysql_fetch_array($lista)) {
      
    $text $testi['text'];
      
    $name $testi['nome'];
      
    $email $testi['email'];
      
    $nomecat $testi['nomecat'];
      
    $titolo $testi['titolo'];
        

      echo 
    "$titolo $email $name  $nomecat
    .
          
    "$text";

    Ma mi restituisce lo stesso testo 2 volte quando appartenenet a 2 categorie diverse,ad es:

    TESTO 1 CAT 1
    TESTO 2 CAT 2
    TESTO 3 CAT 1
    TESTO 1 CAT 2


    COME POSSO FARE INVECE PER OTTENERE :
    TESTO 1 CAT 1 - CAT 2 ?

    GRAZIE MILLE A TUTTI!

    Gyra

    E auguri di buon anno!
    WHERE authorid=authorid
    questo mi sa tanto che sia sbagliato.

    per il tuo problema purtroppo l'unica soluzione che conosco è trovare prima tutti gli id dei testi che interessano a te e poi, per ogni testo, estrarre tutte le categorie.
    purtroppo è una soluzione che prende tempo, fa schifo a leggersi, e tutto quel che vuoi.

    altra soluzione che semplifica di molto il problema è:
    Codice PHP:
    $lista = @mysql_query(
        
    'SELECT  DISTINCT text, nome, email, nomecat, autori.id,  titolo
        FROM testi, autori, categorie  WHERE authorid=authorid
        ORDER BY testi.id'
    ); 
    di modo da avere come risultato un elenco di tutti i testi con relative categorie ordinati:
    TESTO 1 CAT 1
    TESTO 1 CAT 2
    TESTO 2 CAT 2
    TESTO 3 CAT 1

    molto più facilmente gestibili poi in un ciclo.

  5. #5
    Ho provato il codice ma il problema della duplcazione delle righe rimane..

    eventualmente come posso fare ad estrarre gli id dei testi
    e poi fare un fetch_array unico per lanciare la stampa ?

    (In pratica devo fare una tabella con i campi
    titolo- testo - autore - categoria)


  6. #6
    (Nel frattempo ho risolto provvisoriamente eliminando la JOIN table
    in modo da utilizzare solo una categoria per testo...meglio di niente )


  7. #7
    Codice PHP:

    SELECT 
    * , ( SELECT GROUP_CONCAT(categorie.nomecat) as categorie FROM categorie left join categoriatesto on categorie.id categoriatesto.categoriaid WHERE categoriatesto.testoid testi.id )
    FROM 
       autori
          left join testi on autori
    .id testi.authorid
    WHERE authorid 
    $authorid 
    prova così

  8. #8
    Grazie per la risposta

    e complimento per l aconoscenza del linguaggio


    Ora funziona , in effetti non duplica piu' le categorie (anche se
    devo studiarmi meglio il codice perche 'non ho capito per qule motivo eh eh )


    Un unica cosa:
    Mi restituisce un errore

    Undefined index: nomecat
    su questa riga:

    $nomecat = $testi['nomecat'];

    Ho provato anche con

    $nomecat = $testi['categorie'];
    e
    $nomecat = $testi['categorie.nomecat'];

    ma restituisce sempre un errore..che potra' essere ?

  9. #9
    Codice PHP:
    SELECT GROUP_CONCAT(categorie.nomecat)  FROM categorie left join categoriatesto on categorie.id categoriatesto.categoriaid WHERE categoriatesto.testoid testi.id ) as nomecat 
    in questo modo recuperi tramite nomecat

    Codice PHP:
    SELECT GROUP_CONCAT(categorie.nomecat)  FROM categorie left join categoriatesto on categorie.id categoriatesto.categoriaid WHERE categoriatesto.testoid testi.id ) as categorie 
    in questo modo recuperi tramite categorie

    errore mio l'alias lo metti alle select group_concat

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.