Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    166

    query per estrarre i referrer da una tabella

    Ciao a tutti,
    avrei bisogno di un aiuto su una query.
    Ringrazio in anticipo chi potrà rispondermi.

    ho una "tabella" con due campi:
    id chiave primaria intero
    ref intero può assumere duplicati

    per un determinato id ho bisogno di estrarre tutti i record collegati ad esso anche indirettamente:

    mi spiego
    per esempio il record con id = 113
    ha come referrer i record il cui campo id ha come valori 32,33,34 (per esempio)
    questi record hanno quindi come campo ref il valore 113

    il record con id 32
    ha come referrer i record il cui campo id ha come valori 95,96,97 (per esempio)
    questi record hanno quindi come campo ref il valore 32

    ecc

    ho fatto vari tentativi per estrarre il set di record utile ma senza successo

    Qualcuno sa come si fa?

    Grazie

  2. #2
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Innanzitutto devi dirci con quale DB lavori

    poi devi spiegarci meglio il problema .......
    ..... una gerarchia di tabelle con relazione 1 a molti ???
    poi quanto è lunga la gerarchia ???

    .

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    166
    il database è MySQL ma se parliamo di sql in generale va bene lo stesso poi la sintassi me la sbrigo, volevo capire come approcciare il problema

    il problema è spiegato con la struttura delle tabella e con i dati di esempio.
    E' una sola tabella

    Non voglio pormi il problema della lunghezza della gerarchia, se la query funziona funziona sempre (credo).
    Per questo chiedo il parere di un esperto

    Grazie per la risposta

  4. #4
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da artex Visualizza il messaggio
    ...... Per questo chiedo il parere di un esperto ......
    evidentemente non sono cosi esperto,


    Quote Originariamente inviata da artex Visualizza il messaggio
    ho una "tabella" con due campi:
    id chiave primaria intero
    ref intero può assumere duplicati

    il problema è spiegato con la struttura delle tabella e con i dati di esempio
    mi chiedo come fai ad associare all'unico id 113 i 3 valori 32, 33, 34 del tuo esempio

    Vediamo se riusciro a capirlo nel corso della discussione

  5. #5
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,360
    @nman. Secondo me sei un esperto. Le tue risposte ai vari thread parlano per te.

    Non so se ho capito bene il problema. Comunque per percorrere una gerarchia ci vuole un algoritmo ricorsivo. E' possibile fare senza ricorsione ma è più complicato.

    Codice PHP:
    <?php 
    define
    ('DB_HOST''127.0.0.1');
    define('DB_NAME''tests');
    define('DB_USER''root');
    define('DB_PWD' '');$bdd       = new PDO('mysql:host='.DB_HOST.'; dbname='.DB_NAME,DB_USER,DB_PWD, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    function 
    hierarchie($padre,$bdd,&$array,$level) {
     
    $query     "select padre, figlio from tabella1 where padre=$padre order by padre, figlio";
     
    $prepared  $bdd->prepare($query);
     
    $prepared->execute();
     
        while (
    $row $prepared->fetch(PDO::FETCH_NUMPDO::FETCH_ORI_NEXT)) {
       print 
    str_repeat('&nbsp',$level*5).$row[1]."<br/>";
       
    $level2 $level+1;
       
    hierarchie($row[1],$bdd,$array,$level2);
        }
    // function hierarchie($padre,$bdd,&$array,$level) 
    $array = array();
    $padre 1;
    print 
    $padre."<br/>";
    hierarchie($padre,$bdd,$array,1);
    I dati
    Capture20170731_001.JPG

    Il risultato
    Capture20170731_002.JPG
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  6. #6
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,360
    Versione che ritorna un array di array.

    Codice PHP:
    <?php 
    define
    ('DB_HOST''127.0.0.1');
    define('DB_NAME''tests');
    define('DB_USER''root');
    define('DB_PWD' '');$bdd       = new PDO('mysql:host='.DB_HOST.'; dbname='.DB_NAME,DB_USER,DB_PWD, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    function 
    hierarchie($padre,$bdd
    {
     
    $array    = array();
     
    $maxDepth 15;
     
    $array2   = array(); 
     
    _hierarchie($padre,$bdd,$array,1,$maxDepth,$array2);
     return 
    $array;
    }
    function 
    _hierarchie($padre,$bdd,&$array,$level,$maxDepth,$array2,&$maxL=0
    {
     if (
    $level <= $maxDepth
     {
      
    $array2[$level] = $padre;
      
    $query          "select padre, figlio from tabella1 where padre=$padre order by padre, figlio";
      
    $prepared       $bdd->prepare($query);
      
    $prepared->execute();
      while (
    $row $prepared->fetch(PDO::FETCH_NUMPDO::FETCH_ORI_NEXT)) 
      {
       
    $level2 $level+1;
       
    $maxL   $level2;
       
    _hierarchie($row[1],$bdd,$array,$level2,$maxDepth,$array2,$maxL);
      }
      if (
    $level >= $maxL
      {
       
    $arrayRes = array();
       foreach(
    $array2 as $key => $value
       {
        
    $arrayRes[] = $value
       }
       
    $array[] = $arrayRes;
      }
     }


    $padre 1;
    $array hierarchie($padre,$bdd); 
    foreach(
    $array as $key => $subarray) {
     print 
    "$key => ";
     foreach(
    $subarray as $value) {
      print 
    $value."&nbsp;";
     }
     print 
    "<br/>";
    }

    I dati
    padre figlio
    1 2
    1 3
    1 4
    2 21
    2 22
    2 23
    3 31
    3 32
    4 41
    21 220
    21 221
    23 230
    23 231
    32 320
    32 322
    32 323
    231 2310

    Il risultato.

    0 => 1 2 21 220
    1 => 1 2 21 221
    2 => 1 2 22
    3 => 1 2 23 230
    4 => 1 2 23 231 2310
    5 => 1 3 31
    6 => 1 3 32 320
    7 => 1 3 32 322
    8 => 1 3 32 323
    9 => 1 4 41
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2013
    Messaggi
    166
    Grazie

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 © 2024 vBulletin Solutions, Inc. All rights reserved.