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

    [PHP - MySQL] SELECT e UPDATE su tre tabelle, con relazione id della prima

    Allroa ragazzi, mi scuso se il titolo non è molto esplicito

    Premetto che uso il linguaggio SQL da soli 3 giorni, ma sono soddisfatto per i risultati che sto ottenendo.

    Allora, ho tre tabelle con la seguente struttura:

    ip_bands:
    codice:
    id             	int(5)             auto_increment
    name            varchar(255)
    genre         	text
    formed_city 	varchar(63)
    formed_date 	text
    website 	varchar(63)
    members 	varchar(255)
    ip_bands_albums:
    codice:
    id             	int(5)             auto_increment
    id_band         int(5)
    name_album      text
    date_album 	int(4)
    ip_bands_members:
    codice:
    id             	int(5)             auto_increment
    id_band         int(5)
    voice           text
    drum            text
    keyboard        text
    bass            text
    guitar_1        text
    guitar_2        text
    guitar_3        text

    Ora, seleziono tutto con questa query:

    Codice PHP:
    $sql 'SELECT band.*, album.*, members.* 
        FROM ip_bands AS band
        JOIN ip_bands_albums AS album ON album.id_band=band.id
        JOIN ip_bands_members AS members ON members.id_band=band.id
        WHERE band.id=' 
    mysql_real_escape_string($_GET['id']); 
    Con questo elaboro i risultati per poi stamparli a video:
    Codice PHP:
    while ($row $db->sql_fetchrow($result))
            {
                
    $band_id $_GET['id'];
                
    $band_name =  $row['name'];
                
    $genre_array explode("/"$row['genre']);
                foreach(
    $genre_array as $genre)
                {
                    
    $template->assign_block_vars('band_view_genre', array(
                    
    'BAND_GENRE' => $genre,
                    ));
                }
                
    $band_city_formed = (!empty($row['formed_city'])) ? $row['formed_city'] : 'N.D.';
                
    $band_date_formed = (!empty($row['formed_date'])) ? $row['formed_date'] : 'N.D.';
                
    $band_name_album = (!empty($row['name_album'])) ? $row['name_album'] : 'N.D.';
                
    $band_date_album = (!empty($row['date_album'])) ? $row['date_album'] : 'N.D.';
                
    $band_website = (!empty($row['website'])) ? str_replace('http://'''$row['website']) : 'N.D.';
                
    $band_member_drum = (!empty($row['drum'])) ? $row['drum'] . '(' $lang['Band_Drummer'] . ')' '';
                
    $band_member_voice = (!empty($row['voice'])) ? $row['voice'] . '(' $lang['Band_Singer'] . ')' '';
                
    $band_member_keyboard = (!empty($row['keyboard'])) ? $row['keyboard'] . '(' $lang['Band_Keyboarder'] . ')' '';
                
    $band_member_bass = (!empty($row['bass'])) ? $row['bass'] . '(' $lang['Band_Bassist'] . ')' '';
                
    $band_member_guitar_1 = (!empty($row['guitar_1'])) ? $row['guitar_1'] . '(' $lang['Band_Guitarist_1'] . ')' '';
                
    $band_member_guitar_2 = (!empty($row['guitar_2'])) ? $row['guitar_2'] . '(' $lang['Band_Guitarist_2'] . ')' '';
                
    $band_member_guitar_3 = (!empty($row['guitar_3'])) ? $row['guitar_3'] . '(' $lang['Band_Guitarist_3'] . ')' '';

                (
    $board_config['url_rw'] == '1') || (($board_config['url_rw_guests'] == '1') && ($userdata['user_id'] == ANONYMOUS)) ? $view_band_url append_sid(str_replace ('--''-'make_url_friendly($band_name) . '-band-id' $band_id '.html')) :    $view_band_url append_sid('band.' PHP_EXT '?id=' $band_id);

                (
    $userdata['user_level'] = ADMIN && $userdata['session_logged_in']) ? $url_band_edit '[url="band.' PHP_EXT '?edit=' $band_id '"]' $lang['Edit_delete_post'] . '[/url]' $url_band_edit '';

                
    $template->assign_block_vars('band_view_album', array(
                
    'BAND_ALBUM_NAME' => $band_name_album,
                
    'BAND_ALBUM_DATE' => $band_date_album,
                ));
            }
            
    $template->assign_block_vars('band_view', array(
                
    'BAND_ID' => $band_id,
                
    'BAND_NAME' => $band_name,
                
    'BAND_CITY' => $band_city_formed,
                
    'BAND_DATE' => $band_date_formed,
                
    'BAND_ALBUM_NAME' => $band_name_album,
                
    'BAND_ALBUM_DATE' => $band_date_album,
                
    'BAND_WEBSITE' => $band_website,
                
    'BAND_MEMBER_DRUM' => $band_member_drum,
                
    'BAND_MEMBER_VOICE' => $band_member_voice,
                
    'BAND_MEMBER_KEYBOARD' => $band_member_keyboard,
                
    'BAND_MEMBER_BASS' => $band_member_bass,
                
    'BAND_MEMBER_GUITAR_1' => $band_member_guitar_1,
                
    'BAND_MEMBER_GUITAR_2' => $band_member_guitar_2,
                
    'BAND_MEMBER_GUITAR_3' => $band_member_guitar_3,
                
    'U_VIEW_BAND' => $view_band_url,
                
    'U_EDIT_BAND' => $url_band_edit,
            )); 

    Ogni gruppo ha un id UNICO nella prima tabella che lo identifica appunto. Relaziono i dati con le altre tabelle in base a id_band.

    Ho due problemi:

    Il primo:
    Devo inserire diversi dati nei campi in ip_albums_bands quindi devo stampare a video tanti input quanti sono gli album inseriti, più quelli che vuole l'utente, in base ad un valore passato via POST.

    Quindi, dovrei scrivere qualche condizione che mi conti i campi del DB poi ne aggiunga, mantenendo quelli già presenti del DB, quanti scelti.

    Il secondo (è collegato al primo):
    Per inserire i dati, devo abbinare ad ogni album la propria data (mi dovrò basare sul campo id della tabella ip_album_bands) ma non so come.

    Cioè:
    l'id 1 ha in name_album 'Prova' e in date_album '1990';
    l'id 2 ha in name_album 'Prova2' e in date_album '1991;

    Come posso realizzare la query in modo i dati inseriti non si mischino tra di loro, e ogni nome album e ogni data sia nello stesso ID a dove vengono scritti nel form?


    Grazie in anticipo. Possibilmente se rispondete fatelo a prova di scemo perchè non conosco amncora molto beben la sintassi SQL

  2. #2
    Moderatore di Motori di ricerca e webmarketing L'avatar di rigby76
    Registrato dal
    Oct 2005
    residenza
    Firenze
    Messaggi
    4,913
    Francamente non ho capito molto di quali sono i tuoi problemi...

    Il punto 1 direi buio totale...

    Il punto due, se devi inserire un album per un gruppo già presente nel db, basta che ne conosci l'id, e inserisci quello tra i dati:

    INSERT INTO ip_bands_albums (id_band,name_album,date_album) VALUES (1,'Prova',1990)
    estremizzo, banalizzo e polemizzo!

    Hai letto le FAQ sui Motori di Ricerca?

  3. #3
    Allora, relativo al primo problema:
    Devo capire anche come aggiugnere i campi nel form in base a quelli presente nel DB e quelli scelti dall'utente. Esempio:
    Se io ho 3 album nel DB e li dvo modificare, ogni album ha un suo id.
    Supponiamo io decida di aggiungere al form 2 campi, quindi devo mostrare 3 campi (con i dati del DB dentro) più altri 6 che verranno inseriti con INSERT INTO in 2 nuovi id, ma con lo stesso id_name.

    Cioè dovrei creare delle condizioni che se sto editando il dato fa un UPDATE, se ne sta aggiungendo devo fare un INSERT INTO.


    Relativo al secondo:
    Oltre a poter modificare quelli presenti già nel DB devo avere l'opportunità di inserirne degli altri, quindi devo fare un INSERT INTO con un nuovo id, ma che mi mantenga id_name in modo da capire che quegli album sono di quel gruppo.

    Quindi un esempio, sempre supponendo che abbia già 3 album nel DB:

    codice:
    id = 1
    id_band = 1
    name_album = Prova
    date_album = 1990
    
    id = 2
    id_band = 1
    name_album = Prova 2
    date_album = 1991
    
    id = 3
    id_band = 1
    name_album = Prova 3
    date_album = 1992
    Nel form di modifica avrò per esmepio il seguente form con i dati del DB:
    codice:
    Nome: <input type="text" class="post" name="name_album_1" value="{band_edit_album.BAND_ALBUM_NAME}" /> | 
    Data: <input type="text" class="post" name="date_album_1" value="{band_edit_album.BAND_ALBUM_DATE}" />
    
    Nome: <input type="text" class="post" name="name_album_2" value="{band_edit_album.BAND_ALBUM_NAME}" /> | 
    Data: <input type="text" class="post" name="date_album_2" value="{band_edit_album.BAND_ALBUM_DATE}" />
    
    Nome: <input type="text" class="post" name="name_album_3" value="{band_edit_album.BAND_ALBUM_NAME}" /> | 
    Data: <input type="text" class="post" name="date_album_3" value="{band_edit_album.BAND_ALBUM_DATE}" />
    Ora supponiamo di dover aggiungere sempre quei 2 campi, dovrà diventare così il form:
    codice:
    Nome: <input type="text" class="post" name="name_album_1" value="{band_edit_album.BAND_ALBUM_NAME}" /> | 
    Data: <input type="text" class="post" name="date_album_1" value="{band_edit_album.BAND_ALBUM_DATE}" />
    
    Nome: <input type="text" class="post" name="name_album_2" value="{band_edit_album.BAND_ALBUM_NAME}" /> | 
    Data: <input type="text" class="post" name="date_album_2" value="{band_edit_album.BAND_ALBUM_DATE}" />
    
    Nome: <input type="text" class="post" name="name_album_3" value="{band_edit_album.BAND_ALBUM_NAME}" /> | 
    Data: <input type="text" class="post" name="date_album_3" value="{band_edit_album.BAND_ALBUM_DATE}" />
    
    
    
    Nome: <input type="text" class="post" name="name_album_4" value="{band_edit_album.BAND_ALBUM_NAME}" /> | 
    Data: <input type="text" class="post" name="date_album_4" value="{band_edit_album.BAND_ALBUM_DATE}" />
    
    Nome: <input type="text" class="post" name="name_album_5" value="{band_edit_album.BAND_ALBUM_NAME}" /> | 
    Data: <input type="text" class="post" name="date_album_5 value="{band_edit_album.BAND_ALBUM_DATE}" />
    Ora, devo prendere quello che c'è scritto nei primi 3 campi e fare un UPDATE, mentre con quello scritto negli altri 2 inserirli con un INSERT INTO.

    Ho pensato, per mantenere l'id_band di inserire un input type="hidden" che prende il valore in base al gruppo che si sta modificando.


    Spero di essere stato più chiaro ragazzi

  4. #4
    Moderatore di Motori di ricerca e webmarketing L'avatar di rigby76
    Registrato dal
    Oct 2005
    residenza
    Firenze
    Messaggi
    4,913
    Mi sa che stai facendo un po' di cas... ehm, confusione!

    Originariamente inviato da F. Biccheddu
    Oltre a poter modificare quelli presenti già nel DB devo avere l'opportunità di inserirne degli altri, quindi devo fare un INSERT INTO con un nuovo id, ma che mi mantenga id_name in modo da capire che quegli album sono di quel gruppo.
    Cos'è id_name?

    Se vuoi fare un form in cui puoi modificare i dati di album esistenti oppure inserirne dei nuovi, ovviamente insieme ai campi name e date devi portarti dietro come minimo anche l'id dell'album, magari in un campo hidden. Per ogni elemento ricevuto poi verificherai la presenza dell'id e in base a questo deciderai se fare un insert o un update.

    E' chiaro che devi avere a disposizione anche l'id della band, almeno per i nuovi inserimenti (per gli update non è necessario).
    estremizzo, banalizzo e polemizzo!

    Hai letto le FAQ sui Motori di Ricerca?

  5. #5
    Scusami ma è mooolto difficile da sepigare

    Vado a pagina.php?id=1

    Quel valore che ho passato tramite $_GET['id'], servirà per interroragre il DB e avere tutti i record delle tabelle che hanno 1 (in questo caso) in:

    Tabella: ip_bands
    Campo: id

    Tabella: ip_bands_albums
    Campo: id_band

    Tabella: ip_bands_members
    Campo: id_band


    Quindi dovrei fare un foreach() in modo da contare i dati e accodarli, in modo che interroghino di nuovo lo stesso id?

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.