Visualizzazione risultati 1 fino 29 di 29

Discussione: Sono ammesse relazioni fra tabelle?

  1. #1
    Guest

    Predefinito

    ho un database dove ho una tabella chiamata elenco... in questa tabella dovrò inserire indirizzi e altre info su locali di Cagliari.
    Ho però un problema se per un solo locale dovessi inserire più di un numero di telefono o più di una categoria di appartenenza: es ristorante, pizzeria invece che mettere ventimila campi per inserire questi dati più volte posso creare 2 tabelle ciascuna con in id e relazionare ad ogni id della tabella elenco uno o più id dell'altra tabella...

    Sapete anche dirmi come si fà? ... io lo so fare solo con acess!


    -------------------------------------------------
    PS: mi aiutate a crescere? www.karalisnight.altervista.org

  2. #2
    flan non è connesso Utente
    Data registrazione
    17-01-2004
    Messaggi
    181

    Predefinito

    fai una tabella di collegamento dove metterai un id della prima tabella e quello collegato della seconda

  3. #3
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Queste cose in SQL le fai con la JOIN (vedete quanto è nocivo Access?!?)
    per esempio:

    SELECT * FROM tab1 INNER JOIN elenco ON tab1.id_tipo_locale = elenco.id WHERE elenco.descr = 'Pizzeria'

    Cioè nella tabella tab1 non scrivi direttamente 'Pizzeria' in un campo tipo_locale, al suo posto usi un campo id_tipo_locale (numerico ovv.) che è in "relazione" con l'id di un elenco (altra tabella) di tipologia locali, nel quale associare la descrizione.

    Tuttavia.. se ti serve (per quel che ho capito) soltanto per cose semplici tipo "descrizioni" magari usate solo in un caso, io ti consiglierei di evitare una JOIN solo per questo...
    cioè mi spiego, fai molto prima (e risparmi tabelle) scrivendo solo un id numerico.. e poi senza JOIN semplicemente il tuo script PHP restituirà una descrizione (magari a seconda della lingua impostata!) pescata da un ARRAY dove l'ID di cui prima ne sarebbe la chiave cioè:

    [code:1:625e4c5889]...
    $row=mysql_fetch_array($query_result);

    $descr_locali = array('0' => 'Pizzeria', '2' => 'Ristorante', ... );

    $chiave = $row['id_tipo_locale'];
    echo 'Locale: ' . $descr_locali[$chiave][/code:1:625e4c5889]
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  4. #4
    Guest

    Predefinito

    preferisco usare mysql, ma non hocapito una cosa tabelle ne devo fare 2 o tre... io due le avevo già fatte

  5. #5
    Guest

    Predefinito

    :D :D :D grazie mille ci sono riuscita... ma adesso se faccio ad es. 10 tabelle collegate le devo aggiornare una per una o c'è un modo per farlo in conteporanea... usando gli strumenti che ci fornisce AV?

  6. #6
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Citazione Originalmente inviato da karalisnight
    preferisco usare mysql, ma non hocapito una cosa tabelle ne devo fare 2 o tre... io due le avevo già fatte
    No aspetta.. chiariamo, anche il secondo metodo utilizzava MySQL eccome, solo che evitava una JOIN inutile, solo per le descrizioni dei locali.


    ma adesso se faccio ad es. 10 tabelle collegate le devo aggiornare una per una o c'è un modo per farlo in conteporanea... usando gli strumenti che ci fornisce AV?
    Non ho capito.. spiega ben benino.
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  7. #7
    Guest

    Predefinito

    allora praticamente sto preparando varie tabelle...
    una con indirizzi di tutti i locali
    una con la tipologia dei locali (che può essere più di una, ecco perchè la necessità di una tabella separata)
    una per gli spettacoli presenti nei locali (es caraoke, musica dal vivo, balli latino americani etc)
    una per i servizi presenti nei locali (tipo parcheggio nelle vicinanze, servizi per disabili, accettazione buoni pasto etc.)

    Ora se io inizio ad inserire il locale pippo e contemporaneamente voglio inserire tutte le altre informazioni senza dovermi ricordare l'id del locale a memoria posso fare una schermata (tipo acess!!!!!!!!!!) dove siano presenti i dati e che aggiorni tutte le tabelle contemporaneamente :D

    forse hai ragione avendo usato acess ho una visione sbagliata dei database!

  8. #8
    L'avatar di marcio
    marcio non è connesso AlterGuru 2500
    Data registrazione
    17-08-2003
    Residenza
    Palermo
    Messaggi
    3,300

    Predefinito

    Questo post merita di essere salvato in locale

  9. #9
    Guest

    Predefinito

    cioè?

  10. #10
    L'avatar di marcio
    marcio non è connesso AlterGuru 2500
    Data registrazione
    17-08-2003
    Residenza
    Palermo
    Messaggi
    3,300

    Predefinito

    Citazione Originalmente inviato da karalisnight
    cioè?
    secondo te??

  11. #11
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Citazione Originalmente inviato da karalisnight
    allora praticamente sto preparando varie tabelle...
    una con indirizzi di tutti i locali
    una con la tipologia dei locali (che può essere più di una, ecco perchè la necessità di una tabella separata)
    una per gli spettacoli presenti nei locali (es caraoke, musica dal vivo, balli latino americani etc)
    una per i servizi presenti nei locali (tipo parcheggio nelle vicinanze, servizi per disabili, accettazione buoni pasto etc.)

    Ora se io inizio ad inserire il locale pippo e contemporaneamente voglio inserire tutte le altre informazioni senza dovermi ricordare l'id del locale a memoria posso fare una schermata (tipo acess!!!!!!!!!!) dove siano presenti i dati e che aggiorni tutte le tabelle contemporaneamente :D
    Ok è molto più chiaro grazie.

    Allora, la situazione è più che normale per la gestione di un sito basato su DB e ti dico io come gestirei la cosa (ho anche dato uno sguardo al tuo sito e rende l'idea di ciò che ti serve):

    farei una tabella di nome "locali" (o come vuoi tu) con questi campi:
    id, nome, descr, tipo, riposo ... (e altri particolari che vuoi)
    per es. con i valori:
    1, "Pippoland", "..Descrizione del locale..", "09;11", "0;1"

    (poi ti spiego perché quei "09;11" o "0;1")

    poi invece di farmi delle tabelle solo per elencare i nomi delle tipologie "birreria, bowling,etc.." preferisco sicuramente avere degli array in PHP dove poter relazionare l'id del "tipo" o dei giorni di chiusura ("riposo") a delle descrizioni "presentabili", farei così:

    [code:1:5c6cb0cc8c]$tipi = array('00' => 'birreria', '01' => 'bowling', '02' => 'bruschetteria', ..etc.. );
    $giorni = array('domenica', 'lunedì', 'martedì', ..etc.. );[/code:1:5c6cb0cc8c]

    Queste descrizioni dopotutto ti serviranno solo quando dovrai scrivere sulla pagina, in tutto il resto del programma puoi lavorare solo con i loro id.

    Esempio:
    Vuoi appunto proporre una lista di tutte le "bruschetterie" aperte il "lunedì"? bene ti basta questa query SQL:

    "SELECT * FROM locali WHERE tipo LIKE '%02%' AND riposo NOT LIKE '%1%';"

    Capito come? usi il LIKE per sapere se un certo campo contiene un id (come per i tipi di locale), oppure il caso opposto per i giorni di riposo, cioè vuoi sapere i locali che NON hanno un certo giorno di riposo (dunque che sono aperti). I campi "tipo" e "riposo" tipicamente possono contenere PIU' di un id, per questo li indico con "id;id;id;..", perché un locale può essere "pub" e "ristorante" insieme, oppure perché può avere più di un giorno di riposo settimanale.

    So bene che tu intanto stai badando alla pagina di "amministrazione" dei dati del sito, e questo avevi chiesto.. ma è meglio guardare più in là già da subito, pensando soprattutto a come ti verrà comoda questa struttura anche per mostrare i dati nelle pagine del sito, proponendo funzioni di selezione comode da sviluppare.

    Senza che vado avanti col "mio film" dimmi se ti piace questa "direzione"...
    Ciao!
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  12. #12
    Guest

    Predefinito

    mi hai scritto:
    poi invece di farmi delle tabelle solo per elencare i nomi delle tipologie "birreria, bowling,etc.." preferisco sicuramente avere degli array in PHP dove poter relazionare l'id del "tipo" o dei giorni di chiusura ("riposo") a delle descrizioni "presentabili", farei così:


    non riesco a capirti perchè se non lo segno in una tabella che il locale pippo è un ristorante messicano e una birreria dove lo scrivo?

  13. #13
    Guest

    Predefinito

    ok forse ti ho capito rileggendo anche il primo post che mi hai mandato...

    Io creo una tabella unica contenente tutti i dati
    creo la colonna tipo_locali (procedo con questo esempio perchè così ci capiamo) e al posto delle descrizioni metto codici ...

    ma posso mettere più codici nello stesso record ...
    e se si come li separo con delle virgole o basta un semplice spazio...
    :?
    cioè quando poi andrò a richiamare tutte le birrerie e poniamo che birrerie abbia il codice 01
    se nel locale pippo io ho inserito sia il codice 01 che il codice 02 (che magari corrisponde a ristorante) riesco a visualizzare pippo tra le birrerie????????????

  14. #14
    Guest

    Predefinito

    io avrei fatto diversamente.......

    avrei creato una tabella 'elenco' fatta in questo modo:

    id, nome_locale, telefono, indirizzo

    poi un'altra tabella 'categorie' con le categorie

    id, categoria, id_locale

    in 'elenco' va l'elenco dei locali con relativi recapit....
    nella tabella categorie, andranno le categorie, assegnate ai locali,
    ciò non toglie, che un locale può avere più categorie, infatti,
    il locale con id=3

    [code:1:808ca8af6f]id, categoria, id_locale
    1 birreria 3
    2 bar 3[/code:1:808ca8af6f]
    e così via.....

    a questo punto, per sapere l'elenco delle birrerie, la query è semplice

    SELECT a.* FROM elenco as a, categorie as b where a.id=b.id_locale and b.categoria='birrerie'

    sarebbe più corretto creare 3 tabelle, per evitare i dati ridondanti nella tabella categorie.....

  15. #15
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Citazione Originalmente inviato da karalisnight
    ma posso mettere più codici nello stesso record ...
    e se si come li separo con delle virgole o basta un semplice spazio...
    :?
    cioè quando poi andrò a richiamare tutte le birrerie e poniamo che birrerie abbia il codice 01
    se nel locale pippo io ho inserito sia il codice 01 che il codice 02 (che magari corrisponde a ristorante) riesco a visualizzare pippo tra le birrerie????????????


    Facciamo così, visto che ci ho messo parecchio impegno per buttare giù l'ultimo post, prova a rileggere bene e dimmi cosa non ti è chiaro... e soprattutto come te la cavi col PHP, cioè finora cosa hai programmato "di tuo".
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  16. #16
    Guest

    Predefinito

    ok infatti la struttura del database io la volevo impostare proprio in questo modo però volevo riuscire a creare una vista dove queste tre tabelle siano riunite in un unica schermata in modo da poter aggiornare contemporaneamente tre tabelle(o+)

  17. #17
    Guest

    Predefinito

    carina la vignetta ... :D :D :D

    ma non pingere perchè non è colpa tua sono io che di PHP non ne capisco un H ho solo leggiucchiato un paio di guide da WWW.HTML.IT

    Quindi se vuoi mollarmi non preoccuparti ti capirò

  18. #18
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    in modo da poter aggiornare contemporaneamente tre tabelle(o+)
    Appunto questo è il fatto, dico a karalis e Jole:

    se fate così.. il giorno in cui dovrete cancellare un locale lo dovrete fare in più tabelle, andando a ricercare quell'id del locale sparso in giro.
    Se invece hai tutti i dati in una riga di una sola tabella cancelli un record e via, hai risolto. Questo per dire "UN" punto positivo..

    Poi ricordiamoci che il lavorìo superfluo del DB di un utente lo pagano di riflesso tutti gli altri utenti su quel server, c'è questa responsabilità che pesa sulla coscienza di ciascun programmatore php+mysql qui, dunque gettiamo un occhio anche all'ottimizzazione.

    E poi ci lamentiamo se il DB crolla nelle ore di punta :D
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  19. #19
    Guest

    Predefinito

    comunque forse ti ho capito forse mi aspettavo la spiegazione sui quei numeri tra virgolette e non li ho considerati... ma ora ho callegato il cervello. :D

    Vai avanti peeeeeeeerfafoooooooooooreeeeeeeeeeeeee :D

  20. #20
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    OK, comunque non è che c'è molto da continuare..
    altrimenti faccio prima a scriverti tutto il codice e via :D

    Insomma tu puntavi su una comoda pagina di amministrazione per aggiungere locali.. teoricamente è tutta fatica sprecata, perché dovresti gestire l'autenticazione ad aree riservate o mettere una password l'accesso alla pagina (più immediato senza dubbio)... e svilupparti le funzioni di inserimento/modifica ..
    funzioni che ti offre già PhpMyAdmin (lo usi no??)
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  21. #21
    Guest

    Predefinito

    si lo uso però non dal mio pc ho solo installato quello che offre AV. Pensavo che avessi altro da dirmi visto che hai scritto
    Citazione Originalmente inviato da heracleum
    Senza che vado avanti col "mio film" dimmi se ti piace questa "direzione"...
    Ciao!
    Comunque stavo già pensando di iniziare a popolare il database solo che vorrei essere sicura di aver tutto sotto controllo ... per il momento quello che hai scritto l'ho capito 8) anche se ogni tanto il mio cervello si scollega ora sto provando a cercare altri manuali on line grazie per avermi aiutato

  22. #22
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    OK
    se vuoi puoi fare così, intanto provi ad impostarlo come credi, non per forza seguendo i miei criteri (magari un po' contorti a volte, ammetto :D ), appena hai qualche abbozzo di pagina o pezzi di codice dove hai incertezze o errori puoi segnalarlo qui in questo post, prometto di seguirti

    Mi scuso anche un po' con Jole
    non avevo intenzione di criticare né tantomeno bocciare codici altrui. Forse avevo bevuto troppo caffè :P
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  23. #23
    Guest

    Predefinito

    ok grazie :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D

  24. #24
    Guest

    Predefinito

    poniamo il caso che io riesca a far inserire o modificare (mi sembra già più difficile) i locali direttamente a chi naviga in internet...
    posso impostare una casella con le descrizioni (ristoranti, pizzerie...) in modo che chi inserisce il locale veda la descrizione ed invece quando i dati vengono spediti al mio database si trasformino in codice?????????? (fantascienza?)
    e inoltre posso impostare un campo tipo note, in cui venga scritto una frase di default (tipo: da controllare). Chi inserisce il locale non deve poter vedere questo campo tantomeno modificarlo. E tutti i locali inseriti da internet ... quindi con questo campo impostato di default, non devono essere visualizzati sulle pagine finchè non li controllo.... (ancora + fantascientifico?)

    Dimmi solo se si può fare così cerco di pensare il database con questi criteri... poi per la realizzazione vedrò più in la.

  25. #25
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Citazione Originalmente inviato da karalisnight
    Dimmi solo se si può fare così cerco di pensare il database con questi criteri... poi per la realizzazione vedrò più in la.
    Ma cerrrrto che si può fare!

    Ok dunque la cosa cambia, pensavo che l'inserimento di locali potessi farlo solo tu da amministrazione. Bene ancor meglio:
    ti fai una bella paginetta con un FORM html, dove ci metti le caselle che corrisponderanno ai campi del DB che ciascun utente può impostare.
    Ad avvenuto invio dei dati, sul db, nel campo "approvato" ci va a finire di default un valore tipo "0" (=non ancora approvato da te). Almeno l'approvazione la puoi fare direttamente da PhpMyAdmin, nella pagina di Query SQL, usi una query (magari registrata in un file.sql per non scriverla ogni volta) del tipo:
    "SELECT * FROM locali WHERE approvato=0;"
    così ti leggi gli eventuali inserimenti e modifichi il campo approvato in "1" per esempio (="ok approvato"). E dunque nel sito vero e proprio quando fai le query sui locali devi sempre ricordarti di aggiungere la clausola "...WHERE approvato=1 AND...".

    Consiglio di vederti esempi di invio dati a php tramite FORM html per inserimento in DB, a meno che non hai già fatto pratica.

    Anzi mi complimento con te perché hai inquadrato bene la gestione di un sito web (una webmaster nata? :D ) e hai delle ottime idee. Continua così vai alla grande
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  26. #26
    Guest

    Predefinito

    modestamente....

  27. #27
    Guest

    Predefinito

    non riesco a cambiare le dimensioni del carattere all'interno di uno script PHP ho provato sia mettendo il codice all'interno della tabella che contiene lo script sia inserendolo con echo ma non cambia niente.

    Così funziona tutto
    /* stampa risultati in html*/

    echo "<table>\n";
    echo "<div align=center>ho trovato\n";
    echo($numero_locali);
    echo " locali</div><p>\n";
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    echo "\t<tr>\n";
    foreach ($row as $col_value) {
    echo "\t\t<td>$col_value</td>\n";
    }
    echo "\t</tr>\n";
    }
    echo "</table>\n";

    ma se scrivo
    /* stampa risultati in html*/

    echo "<table>\n";
    echo "<div align=center>ho trovato\n";
    echo($numero_locali);
    echo " locali</div><p>\n";
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    echo "\t<tr>\n";
    foreach ($row as $col_value) {
    echo "\t\t<td><font size="2">$col_value</font></td>\n";
    }
    echo "\t</tr>\n";
    }
    echo "</table>\n";

    mi da un errore, perchè?????????????????????????

    ho anche provato a metterlo dopo il comando table ma non funge lo stesso.

  28. #28
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Eh certo, devi "becslesciare" (in italiano, aggiungere una sbarra \ detta backslash) le doppievirgolette altrimenti queste vanno a chiudere la stringa e non gli torna più nulla:

    echo "\t\t<td><font size=\"2\">$col_value</font></td>\n";

    Col backslash davanti invece viene interpretata semplicemente come carattere " doppia virgoletta, stessa cosa per molti altri caratteri che infatti hai usato in quella stringa come
    \n = a capo
    \t = tab

    Ti capiterà molto spesso questa cosa, tipico errore infame perennemente in agguato, dunque "occhio" costante alle virgolette varie quando le usi dentro una stringa php.
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  29. #29
    Guest

    Predefinito

    grazie mille non ci avevo pensato!

Regole di scrittura

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