Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    605

    Ricerca in più tabelle di un campo

    Ciao a tutti,
    in un DB vengono create delle tabelle per ogni anno (in modo dinamico) esempio tbanno2001,tbanno2002 ect


    codice:
    $stringa= "show table status LIKE '%tbanno%'" ;
    $tabelle=mysql_query("$stringa") or die("Impossibile eseguire la query $ciao
    Errore:".mysql_error());
    	
    $query .= "SELECT "; 
    
    $table="";
    while ($rec_tabelle=mysql_fetch_array($tabelle))
    {
    
    $query .= $rec_tabelle[0] . ",";
    } 
    
    echo $query .= " from Database where Cognome='Rossi'";


    Io con la prima query mi trovo tutte le tabelle che iniziano con tbanno e dopo dovrei ricercare in tutte queste tabelle il campo congnome che esiste appunto in tutte.A parte che non sò se è giusta la query, ma per ora ho il problema che la query mi viene scritta

    select tabanno2000,tbanno2001,tbanno2002, from


    con la virgola finale dietro l'ultima tabella,
    come faccio a eliminarla...?


    Poi al di la di tutto volevo un consiglio, si tratta di una tabelle non indicizzate che contengono un 500000 record ciascuna.... quindi secondo voi meglio fare una ricerca generale su tutte le tabelle o fare una query per ogni tabella e far vedere alla fine tutti i risultati...??
    Ciao e buona domenica

  2. #2
    Le tabelle sono identiche. Usa UNION

    http://dev.mysql.com/doc/mysql/en/UNION.html#IDX1592


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    605

    grazie piero

    grazie mille piero,
    proverò ad usare la UNION, ma come faccio anche in questo caso a fare la query per quante tabelle trova il mio ciclo?

    prima ero in questa situazione


    $stringa= "show table status LIKE '%tbanno%'" ;
    $tabelle=mysql_query("$stringa") or die("Impossibile eseguire la query $ciao
    Errore:".mysql_error());

    $query .= "SELECT ";

    $table="";
    while ($rec_tabelle=mysql_fetch_array($tabelle
    ))
    {

    $query .= $rec_tabelle[0] . ",";
    }

    echo $query .= " from Database where Cognome='Rossi'";



    e ora devo sempre mettere questo dentro il ciclo...


    (SELECT cognome FROM tbanno2000 WHERE Cognome='$cognomedacercare')
    UNION
    (SELECT articolo FROM tbanno2001 WHERE Cognome='$cognomedacercare')
    UNION
    (SELECT articolo FROM tbanno2002 WHERE Cognome='$cognomedacercare')
    UNION
    (SELECT articolo FROM tbanno2003 WHERE Cognome='$cognomedacercare')



    come si potrebbe fare?
    Grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    605

    up

    spero che qualcuno potrà autarmi...
    ma se metto la query nel ciclo per crearla in modo dinamico, alla fine ho sempre un UNION in più...

    $stringa= "show table status LIKE '%tbanno%'" ;
    $tabelle=mysql_query("$stringa") or die("Impossibile eseguire la query $ciao
    Errore:".mysql_error());
    while ($rec_tabelle=mysql_fetch_array($tabelle))
    {
    $query ="(SELECT Cognome FROM $rec_tabelle[0] WHERE Cognome='$cognomedacercare') UNION
    ";

    //$query = $rec_tabelle[0] . ",";
    echo " $query";
    }



    il ciclo naturalmente continua fino a quando trova tabelle con quel nome.. ma alla fine mi stampa questo:

    (SELECT Cognome FROM tbanno2000 WHERE Cognome='Rossi') UNION
    (SELECT Cognome FROM tbanno2001 WHERE Cognome='Rossi') UNION
    (SELECT Cognome FROM tbanno2002 WHERE Cognome='Rossi') UNION
    (SELECT Cognome FROM tbanno2003 WHERE Cognome='Rossi') UNION
    (SELECT Cognome FROM tbanno2007 WHERE Cognome='Rossi') UNION
    (SELECT Cognome FROM tbanno2008 WHERE Cognome='Rossi') UNION
    (SELECT Cognome FROM tbanno2010 WHERE Cognome='Rossi') UNION
    (SELECT Cognome FROM tbanno2012 WHERE Cognome='Rossi') UNION
    (SELECT Cognome FROM tbanno2013 WHERE Cognome='Rossi') UNION


    come vedete l'union finale è in più..
    mi date una mano... VVoVe:

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    605
    Allora ho risolto facendo un controllo sul record se sono all'ultimoo non mettere UNION... giustamente... era una scemata.... ma chissa a che stavo a pensare....

    ho fatto così...

    codice:
    $stringa= "show table status LIKE '%tbanno%'" ;
    $tabelle=mysql_query("$stringa") or die("Impossibile eseguire la query $ciao
    Errore:".mysql_error());
    
    $num = mysql_num_rows($tabelle); 
    echo "Tabelle trovate:  ". $num . "
    <HR>";
    $i=1;
    while ($rec_tabelle=mysql_fetch_array($tabelle))
    {
    $query ="(SELECT Cognome FROM $rec_tabelle[0] WHERE Cognome='$cognomedacercare')"; 
    if ($i < $num) $query .=" UNION ";
    echo " $query"; 
    
    $result = mysql_query($query);
    
    $i++;
    } 
    
    
    $num_record = mysql_num_rows($result); 
    echo "Record trovati: $num_record
    "; 
    
    while ($row = mysql_fetch_array($result))
    { 
    	 
    	echo "COGNOME: " . $row[Cognome] . "
    ";
    	
    }
    il codice ancora non mi funge come vorrei , e credo proprio che non gli piaccia

    $result = mysql_query($query);

    nel ciclo...

    Naturlmente ho provato i due pezzi di codice e vanno bene ma è quella query nel ciclo... che non so tanto come usare, voi come fareste?
    Ciao cari.. e grazie

  6. #6
    sono affetto da fagianite... e sinceramente non ci capisco granche' di quello che vuoi fare.

    Hai un numero non conosciuto di tabelle annuali. Con 500.000 record cadauna. devi tirar fuori un certo nome da tutte le tabelle. Fai una query per ogni tabella con buona pace di tutto il resto. forse e' pure piu' veloce se indicizzi per nome. Tanto con UNION risparmierai sulla connessione ma devi fare una tabella temporanea.

    Metti il nome delle tabelle in array e poi lo scorri con un foreach.
    codice:
    foreach($array_di_nomi as $tab) {
    $query= mysql_query("SELECT * FROM $tab where cognome = '$cognome'");
    while ($row = mysql_fetch_assoc($query)) {
    echo "COGNOME: " . $row['Cognome'] . "
    ";
    }
    }


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    605
    Ciao Piero.. e grazie ancora..
    non è che sei tu affetto da fagianite.. ma forse sono io che mi sto a complicare la vita...
    ho appunto un tot tabelle su qui trovare tre campi nome cognome e indirizzo, siccome so come inizia il nome della tabella io mi facevo prima un ciclo per trovare tutte le tabelle e poi volevo fare la UNION come tu mi consigliavi.
    Ma sono appunto a condizioni con 400000 record di media
    per tabella.
    Tu pensi che si a più veloce fare una select per tabella? pensi che in questo modo sia più veloce della UNION?

    Se così come faccio a riempire quell'array in modo dinamico.
    Immagino lo devo riempire sempre in questo ciclo.



    $stringa= "show table status LIKE '%tbanno%'" ;
    $tabelle=mysql_query("$stringa") or die("Impossibile eseguire la query$ciao
    Errore:".mysql_error());

    $num = mysql_num_rows($tabelle);
    echo "Tabelle trovate: ". $num . "
    <HR>";
    $i=1;
    while ($rec_tabelle=mysql_fetch_array($tabelle))
    {


    qui riempio l'array...?

    $i++;

    }



    e poi fare come dici...


    foreach($array_di_nomi as $tab) {
    $query= mysql_query("SELECT * FROM $tab where cognome = '$cognome'");
    while ($row = mysql_fetch_assoc($query)) {
    echo "COGNOME: " . $row['Cognome'] . "
    ";
    }
    }


    ma come riempio quest'array in modo dinamico? se non ti sto stressando troppo... vista pure l'ora
    grazie

  8. #8
    prova cosi'... ma che te ne fai del numero di tabelle???
    codice:
    $stringa= "show table status LIKE 't%'" ;
    
    $tabelle = mysql_query("$stringa") or die(mysql_error());
    while ($rec_tabelle = mysql_fetch_row($tabelle)) 
    { 
    $lista[] = $rec_tabelle['0'];
    }
    
    foreach($lista as $tab) {
    
    $query= mysql_query("SELECT * FROM $tab where cognome = '$cognome'");
    
    while ($row = mysql_fetch_assoc($query)) {
    echo "COGNOME: " . $row['cognome'] . "
    ";
    }
    }

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    605

    Perfetto....

    Perfetto così.. và.. e senz'altro mi sembra più veloce... grande...

    prova cosi'... ma che te ne fai del numero di tabelle???


    Hai ragione a chiedermi del numero delle tabella...
    quello era solo per prova se funzionava la query.... in realtà non mi serve..

    Un'altra cosa... Piero..
    Siccome sono tantittisi dati e siccome posso essere nella situazione di aspettare un pò per avere il risultato...
    Mi piacerebbe fare qualcosa tipo ricerca forum di Aruba, hai mai visto come funziona?
    Tu invii la ricerca lui intanto ti aggiorna il numero dei risultati trovati e alla fine te li fà vedere tutti insieme...
    sai dove potrei trovare info su questa cosettina.... o per lo meno un'idea di di come iniziare a pensare... una specie di loading di intrattenimento...
    Ti ringrazio comunque, davvero tanto
    buona notte...
    Ciao

  10. #10
    Non ho mai provato e non so come fanno quelli la. Qualche tempo fa era apparso in qualche thread questo argomento, ma non l'ho seguito.

    Prova a cercare nei thread. Non saprei darti una indicazione corretta.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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.