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

    Prendere record da 3 tabelle mysql ed ordinarli secondo due variabili

    Ciao,
    il problema che ho questa volta è un pò complesso per me, so anche che è una cosa semplice per molti utenti qui, per questo confido in un aiuto da parte vostra.
    Il quesito è questo:
    devo prendere dati da 3 tabelle mysql, rispettivamente TABLE_CUSTOMERS, TABLE_ADDRESS_BOOK e TABLE_CUSTOMERS_INFO. Non ho nessun problema a farlo con due query ma non riesco a prendere i risultati contemporaneamente da tutte e tre le tabelle!
    Mi serve prendere i dati contemporaneamente perchè ho un piccolo motore di ricerca implementato, che aggiunge una stringa

    Codice PHP:
    $search "where c.customers_lastname like '%" $keywords "%' or c.customers_firstname like '%" $keywords "%' or c.customers_email_address like '%" $keywords "%'"
    alla mia query e, come se non bastasse, devo poter ordinare i risultati secondo nome azienda o secondo data di creazione account.. vi posto il codice originario così è più chiaro:

    Codice PHP:
        //TotalB2B start
        
    $customers_query_raw "select c.customers_id, c.customers_lastname, c.customers_firstname, c.customers_status,  c.customers_email_address, entry_company, entry_city, a.entry_country_id from " TABLE_CUSTOMERS " c left join " TABLE_ADDRESS_BOOK " a on c.customers_id = a.customers_id and c.customers_default_address_id = a.address_book_id " $search " order by a.entry_company";
        
    //TotalB2B end 
    e come avevo risolto io era:

    Codice PHP:
        
        
    //TotalB2B start
        
        
    if ($HTTP_GET_VARS['ordina']=="nome")
            {
            
    $order="a.entry_company";
            }
        else
            {
            
    $order="r.customers_info_date_account_created DESC";
            }
            
        
    $customers_query_raw "select r.customers_info_date_account_created, c.customers_id, c.customers_lastname, c.customers_firstname, c.customers_status,  c.customers_email_address, a.entry_company, a.entry_city, a.entry_country_id from " TABLE_CUSTOMERS " c, " TABLE_ADDRESS_BOOK " a, " TABLE_CUSTOMERS_INFO " r where c.customers_id = a.customers_id and c.customers_default_address_id = a.address_book_id and c.customers_id = r.customers_info_id " $search " order by " $order
    capite anche voi che se mi fanno una ricerca, avendo usato WHERE nella mia soluzione, non posso aggiungere un'altro WHERE.. mi va tutto in palla.. quindi devo risolvere in un'altro modo..

    praticamente devo avere la possibilità di ordinare per nome e data di creazione dell'account, tutti i dati delle 3 tabelle devo prenderli in una sola query.. come si fa???

    E' dalle 6 di oggi pomeriggio che provo ma nulla fa fare!




    Aiutatemi vi pregooooo

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    99
    devi fare la join delle tre tabelle.
    se le tabelle hanno qualche attributo in comune puoi fare benissimo le join

    Codice PHP:
    select from tb1 join tb2 on condizione join tb3 on condizione2 
    se non hanno attributi fai il prodotto cartesiano cioè
    Codice PHP:
    select from tb1,tb2,tb3 
    nel codice per entrambi puoi aggiungere l'ordinamento e le vere condizioni di ricerca

  3. #3
    GRANDEEEEE!!!!

    Grazie, avevo letto la guida sul join di html.it ma non avevo capito una mazza (l'hanno fatta un pò difficilina da capire per un utonto come me! ), a volte spiegare in una riga è più esauriente che spiegare in una pagina!

    Ora funziona a meraviglia!


  4. #4
    Salve... mi accodo a questo post per chiedere un piccolo chiarimento.


    ho provato a fare il join come il secondo esempio di 3 tabelle mysq.

    codice:
    $query = "SELECT * FROM madama, kaleo, cecina";
    
    
            $result = mysql_query($query, $db);
            while ($row = mysql_fetch_array($result))
    {
              echo "<tr><td align=center>";
              echo "$row[nome]
    </td>";
              echo "<td align=center>";
              echo "$row[soprannome]
    </td>";
              echo "<td align=center>";
              echo "$row[eta]
    </td>";
              echo "<td align=center>";
              echo "$row[ruolo]
    </td>";
              echo "<td align=center>";
              echo "[img]. $row['foto'] . [/img]
    </td>";
              echo "</tr>";
    }
    ma se faccio ad esempio: $query = "SELECT * FROM madama, kaleo, cecina ORDER BY nome";
    mi da un'errore.
    se lo lascio cosi com'è, mi da i dati dell'ultima tabella inserita. in questo caso della tabella cecina, la ripete 2 volte ma non mi fa vedere le altre 2 tabelle.
    le tabelle sono praticamente identiche. stessi campi.
    del tipo:
    id, nome, attivo ec.. ec..
    e quello che volevo fare io era prendere tutti i dati dalle tre tabelle e farli uscire in ordine alfabetico.
    vi ringrazio in anticipo per qualsiasi consiglio che mi darete
    ..::Gentoo powered::..

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Ti basta fare una union se le strutture sono identiche.

    codice:
    select * from madama
    union all
    select * from kaleo
    union all
    select * from cecina
    order by nome

  6. #6
    Grande!!! proprio quello che stavo cercando!

    Grazie grazie grazie mille veramente
    ..::Gentoo powered::..

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.