Visualizzare dati con Inner Join

di il
6 risposte

Visualizzare dati con Inner Join

Ciao a tutti, da poco ho concluso un corso Fullstack e mi sto cimentando nella creazione di un piccolo gestionale in PHP/MySql Html e Bootstrap, con l'immissione dei dati del cliente e visualizzazione degli stessi.

In un DB ho creato 2 tabelle “customers” e “products”, la prima tabella ha questi campi: id, name_customer, surname_customer, date, commission, address_customer, phone_customer, freeNote 

mentre la tabella products ha questi campi: id, idCustomers, itemName, itemCompany, itemQuantity, itemPrice, itemAdvance, itemDiscount, itemRounding, itemNote

Nella pagina di visualizzazione, oltre mostrare la differenza tra il prezzo e l'acconto (itemPrice - itemAdvance) vorrei mostrare tutti gli altri campi (Cognome, data, etc..) sono riuscito a tirare fuori solo valore appunto della differenza tra prezzo e anticipo mentre per gli altri mi da errore. Ho cercato in rete e visto che bisogna fare un INNER JOIN ma non capisco come. Allego codice della pagina visualizza.php

 <?php
   $result = mysqli_query($conn, "SELECT *,  (itemPrice - itemAdvance) AS balance FROM products");
?>

<!doctype html>
<html lang="en">
  
<body>

    <div class="container-fluid">
        <a href="./add.php"><button>Aggiungi</button></a>
        <div class="row">
            
            <div class="col-md-12">
            <table class="table responsive" id="elencoutenti" data-toggle="table"  data-filter-control="true" data-show-jump-to="true" data-pagination="true" data-show-columns="true">
                    <thead>
                        <tr>
                            <th scope="col" data-field="id">#</th>
                            <th scope="col" data-field="name" data-filter-control="input">Cliente</th>
                            <th scope="col" data-field="surname" data-filter-control="input">Totale</th>
                            <th scope="col" data-field="email" data-filter-control="input">Acconto</th>
                            <th scope="col" data-field="product" data-filter-control="input">Saldo</th>
                            <th scope="col" data-field="price" data-filter-control="input">Incassare</th>
                            <th scope="col" data-field="price" data-filter-control="input">Tot Ordini</th>
                            <th scope="col" data-field="date" data-filter-control="datepicker">Data</th>
                            <th scope="col">Azione</th>
                            <th scope="col">Info</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php 
                            if ($result->num_rows > 0) {
                                while($row = $result->fetch_assoc()) { ?>
                                <tr>
                                    <td class="text-left"><?php echo $row["id"];?></td>
                                    <td class="text-left"><?php echo $row["surname_customer"];?></td>
                                    <td class="text-left"></td>
                                    <td class="text-left"><?php echo $row["itemAdvance"];?></td>
                                    <td class="text-left"><?php echo $row["balance"];?></td>
                                    <td class="text-left"><?php echo $row["product"];?></td>
                                    <td class="text-left"><?php echo $row["price"];?> €</td>
                                    <td class="text-left"><?php echo $row["date"];?></td>
                                    <td style="width:10% !important;">
                                        <form  method="POST" action="modifica.php" id="modifica_<?php echo $row["id"];?>">
                                            <input type="hidden" name="record_id" value="<?php echo $row["id"];?>">
                                        </form>
                                        <i class="fa fa-pencil-square-o blue" title="Modifica Record" style="cursor: pointer" aria-hidden="true" onclick="$('#modifica_<?php echo $row['id'];?>').submit();"></i>

                                        <i class="fa fa-trash red" title="Elimina Record" style="cursor: pointer" aria-hidden="true" onclick="if(confirm('Confermi la cancellazione?')) $('#cancella_<?php echo $row['id'];?>').submit();"></i>
                                        <form method="POST" id="cancella_<?php echo $row["id"]; ?>" action="">
                                            <input type="hidden" name="record_id" value="<?php echo $row["id"];?>">
                                            <input type="hidden" name="azione" value="cancella">
                                        </form>
                                    </td>
                                    <td><a href="dettaglio.php?id=<?php echo $row["id"]; ?>" target="_blank"><i class="fas fa-info-circle" style="cursor: pointer" title="Dettaglio"></i></a></td>
                                </tr>
                                <?php }
                            }
                        ?>
                    </tbody>
                </table>
                <div class="container">
                    <div class="row">
                        <div class= "col-md-12"><?php totalAllCustomers(); ?></div>                        
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>

Grazie.

6 Risposte

  • Re: Visualizzare dati con Inner Join

    SELECT <elenco campi delle due tabelle> FROM <prima tabella> INNER JOIN <seconda tabella> ON <chiave primaria prima tabella> = <chiave secondaria seconda tabella>

    Prova su!

  • Re: Visualizzare dati con Inner Join

    02/02/2023 - grumpy ha scritto:


    SELECT <elenco campi delle due tabelle> FROM <prima tabella> INNER JOIN <seconda tabella> ON <chiave primaria prima tabella> = <chiave secondaria seconda tabella>

    Prova su!

    Grazie per la risposta. Alla fine ci sono riuscito :D

  • Re: Visualizzare dati con Inner Join

    Aggiornamento.

    Sono riuscito ad estrarre i dati tramite inner join. Adesso voglio poter modificare i dati inseriti. 

    Ho seguito la logica della view per prelevare i dati da aggiornare, solo che, quando seleziono il cliente, mi da sempre l'ultimo suo prodotto inserito.

    Quindi se per esempio, inserisco un cliente con tre prodotti, nella sua schermata di modifica vedo sempre l'ultimo suo.

  • Re: Visualizzare dati con Inner Join

    Cos'è la “logica della view” ? Non essere criptico e mostra sempre il codice usato.

  • Re: Visualizzare dati con Inner Join

    09/02/2023 - grumpy ha scritto:


    Cos'è la “logica della view” ? Non essere criptico e mostra sempre il codice usato.

    Volevo dire che seguendo il codice che ho usato per vedere a video i dati, ho preso lo stesso codice per richiamarmi i dati per la pagina della modifica. Alla fine ci sono riuscito.

  • Re: Visualizzare dati con Inner Join

    Come hai già scoperto, per unire le due tabelle "customers" e "products" devi utilizzare l'operatore INNER JOIN. Ecco come dovrebbe apparire la query:

    $result = mysqli_query($conn, "SELECT customers.surname_customer, customers.date, customers.commission, products.itemName, products.itemCompany, products.itemQuantity, products.itemPrice, products.itemAdvance, (products.itemPrice - products.itemAdvance) AS balance, products.itemDiscount, products.itemRounding, products.itemNote FROM customers INNER JOIN products ON customers.id = products.idCustomers");

    In questo modo stai selezionando tutti i campi che desideri dalla tabella "customers" e dalla tabella "products", utilizzando INNER JOIN per unire le due tabelle tramite il campo comune "idCustomers". Inoltre, stai calcolando il bilancio utilizzando la formula (itemPrice - itemAdvance), come hai già fatto nella query precedente.

Devi accedere o registrarti per scrivere nel forum
6 risposte