Visualizzazione risultati 1 fino 6 di 6
Like Tree1Likes
  • 1 Post By mzanella

Discussione: select da due o piu tabelle

  1. #1
    Data registrazione
    03-09-2013
    Residenza
    Los Angeles
    Messaggi
    191

    Predefinito select da due o piu tabelle

    Salve dopo aver realizzato due tabelle opportunatamente relazionate, devo estrarre i dati in file php
    ho realizzato due file uno dove vengono scelti i record, e questo dove dovrebbe comparire "la lista dei dati"


    $select = 'SELECT DISTINCT id, testodellatabella1 '; (come faccio ad inserire una nuova tabella ?)
    $from = ' FROM tabella1;
    $where = ' WHERE 1=1';

    $autoreid = $_POST['autoreid'];
    if ($autoreid != '') { // An author is selected
    $where .= " AND autoreid='$autoreid' ";
    }
    ?>

    <table>
    <?php
    $datiinoutput = @mysql_query($select .$from . $where);.......


    Auguri
    Ultima modifica di Aforismadelgiorno : 06-01-2019 alle ore 16.51.11

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Non usare le funzioni mysql_*: sono deprecate e, nelle nuove versioni di PHP, rimosse dal linguaggio.
    In ogni caso non usare l'operatore di soppressione degli errori @: se ci sono errori meglio vederli!

    Per incrociare i dati di due o più tabelle puoi usare una JOIN:
    Codice:
    SELECT DISTINCT id, ... FROM tabella_1 JOIN tabella_2 ON tabella_1.id_autore = tabella_2.id_autore;
    Una JOIN viene effettuata su una (o più) condizioni ON, le quali generalmente riflettono il modo in cui hai strutturato la relazionalità nella base di dati.

    I suggerimenti che do più spesso:


  3. #3
    Data registrazione
    03-09-2013
    Residenza
    Los Angeles
    Messaggi
    191

    Predefinito

    $select = 'SELECT DISTINCT id, text, author ';
    $from = ' FROM tabella_1 JOIN autori ON';
    $where = ' WHERE 1=1';

    $autoreid = $_POST['autoreid'];
    if ($autoreid != '') { // An author is selected
    $where .= " AND autoreid='$autoreid' ";
    }

    no va , sto seguendo una guida ma non capisco perchè non posso mettere tutto in una variabile ecc

    si tratta di una relazione uno a molti autori e testo delle tabella_1
    Ultima modifica di Aforismadelgiorno : 07-01-2019 alle ore 13.12.08

  4. #4
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Codice PHP:
    $from = ' FROM tabella_1 JOIN autori ON';
    Ti manca un pezzo dopo ON, devi specificare quali campi utilizzare per effettuare la JOIN. Per fare un esempio, anche se non conosco la struttura delle tabelle che stai utilizzando, supponiamo che le tabelle abbiano questa struttura:
    Codice:
    autore (
        id INT,
        nome VARCHAR,
        cognome VARCHAR
    );
    
    testo (
        id INT,
        id_autore INT,
        contenuto TEXT
    );
    La query di base, alla quale aggiungere successivamente clausole e modificatori, diventa:
    Codice:
    SELECT * FROM autore JOIN testo ON autore.id = testo.id_autore;
    Il cui risultato sarà in questa forma:
    Codice:
    autore.id | nome     | cognome | testo.id | id_autore | contenuto              |
            1 | Aldo     | Abbott  |        7 |         1 | Un testo qualunque...  |
            1 | Aldo     | Abbott  |       20 |         1 | Un altro testo...      |
            3 | Gesualdo | Bernard |       15 |         3 | Un'opera letteraria... |
    ...
           23 | Zirolamo | Zevio   |        3 |        23 | Un testo...            |
    Se vuoi quindi estrarre campi specifici o restringere i risultati puoi usare i soliti strumenti:
    Codice:
    SELECT DISTINCT autore.id, nome, cognome, testo FROM autore JOIN testo ON autore.id = testo.id_autore WHERE id_autore = 3;
    non capisco perchè non posso mettere tutto in una variabile
    Non lo capisci perché non è vero . Sei libero di mettere l'intera query in un'unica variabile, per esempio una cosa del genere:
    Codice PHP:
    $query = "SELECT DISTINCT FROM tabella_1 JOIN autori ON tabella_1.id = autori.id" . (!empty($_POST['autoreid']) ? " WHERE autori.id = " . $_POST['autoreid'] : "");
    Aforismadelgiorno likes this.

    I suggerimenti che do più spesso:


  5. #5
    Data registrazione
    03-09-2013
    Residenza
    Los Angeles
    Messaggi
    191

    Predefinito

    Error: Column 'name' in field list is ambiguous

    ho due tabelle che hanno lo stesso titolo nome del campo

    $sql = 'SELECT name, name FROM tabella1, tabella2;
    ......
    ho provato anche con
    $sql = 'SELECT name, tabella2.name FROM tabella1, tabella2;
    ........

  6. #6
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    A MySQL non piacciono le omonimie, ma si può risolvere usando degli alias, rendendo così diversi i nomi delle colonne:
    Codice:
    SELECT tabella1.name AS tabella1_name, tabella2.name AS tabella2_name FROM tabella_1 JOIN tabella_2 ON tabella_1.campo1 = tabella_2.campo2

    I suggerimenti che do più spesso:


Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •