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

    [mysql] stored procedure

    Salve a tutti, ho un problema serio che da solo non riesco a risolvere per mancaza di conoscenza approfondita dei DB. Lo potrei risolvere da codice, ma credo che non sia la soluzione più performante, quindi chiedo a voi.
    Prima domanda: ma le stored procedure ritornano anche delle intere tabelle, sulle quali poi posso applicare delle query da PHP (come le viste)?
    Se la risposta è no... inutile leggere oltre, ma spero di si
    Premetto che il manuale che c'è sul sito l'ho letto... ma c'ho capito poco, nel senso che ho capito ma non so come utilizzare le nozioni per il mio problema.

    Facciamo un esempio per parlare tutti della stessa cosa:

    ---------------------------------------------------------------------
    TABELLA UTENTI
    id_utente int(10) autoincrement
    nome char(255)
    cognome char(255)
    _AUTORE int(10)
    ---------------------------------------------------------------------
    TABELLA CATEGORIE
    id_cat int(10) autoincrement
    categoria char(255)
    ---------------------------------------------------------------------
    TABELLA APPOGGIO
    id int(10) autoincrement
    id_utente int(10)
    id_cat int(10)
    ---------------------------------------------------------------------
    TABELLA PERMESSI
    id int(10) autoincrement
    _AUTORE int(10)
    id_cat int(10)
    leggi int(1)
    scrivi int(1)
    ---------------------------------------------------------------------

    Il tutto per avere degli utenti che possono leggere o scrivere su una rubrica in base alle categorie.
    Ogni utente può essere associato a più categorie.
    Ogni utente ha dei permessi di lettura e scrittura in base alla categoria. Es: un utente può leggere e scrivere tutte le categorie ed un altro solo una delle molte.
    A dire il vero ci sarebbero anche altri casi, ma voglio semplificare, poi mi arrangio se capisco come si fa.

    Posso creare una procedura che come risultato mi ritorna una tabella con i dati utente passandogli l'id dell'utente che sta utilizzando la procedura?

    ES: io mi logo -> ho un id_utente -> la procedura legge il primo utente -> seil primo utente appartiene ad una categoria che io posso vedere lo aggiunge alla tabella -> passa al secondo -> etc....

    Dite che si può fare?
    La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.
    (Francisco Goya)
    ----------------------------------------
    http://www.mangioebevo.it
    http://www.definitives.org

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    ho letto circa il 10% di quello che hai scritto, perchè in generale le store procedures, in mysql, non si usano, o meglio non hanno un gran motivo di essere.

    sono inefficienti, non danno particolari vantaggi rispetto a chiamate multiple per la tipologia particolarmente "lieve" delle connessioni dei client mysql.
    ---
    un approccio quindi "normale" per altri RDBMS diventa "speciale" per mysql (e viceversa)

    La primissima cosa da chiedersi, prima di fare qualsiasi cosa, è "perchè".

    Hai scritto che vuoi qualcosa di più "performante", ma "più" rispetto a cosa?

    Una SP ha un vaghissimo senso se, invece di eseguire 1000 comandi SQL, fai una singola chiamata a una SP che esegue lei i 1000 comandi (come detto per mysql in realtà ciò non è vero).

    Tu vuoi fare una SP da chiamare poi 1000 volte?

  3. #3
    No allora... prova a spiegare il perchè...
    Mettiamo di avere circa 5000 utenti nel DB (caso reale)
    Io in php ora dovrei crearmi quel processo (->) e non avrei problema per tutti i 5000 record, ma ho il dubbio che i tempi di risposta siano nell'ordine del minuto... anche perchè dovrei paginarli... e per paginarli dovrei fare un ciclo per sapere quanti sono e poi un ciclo per visualizzarli.
    Mi chiedevo se con una SP potevo fare il tutto ottenendo di conseguenza una tabella che poi con mysql_row e le solite cose visualizzo e pagino.
    La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.
    (Francisco Goya)
    ----------------------------------------
    http://www.mangioebevo.it
    http://www.definitives.org

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da rinosan_76bis
    No allora... prova a spiegare il perchè...
    Mettiamo di avere circa 5000 utenti nel DB (caso reale)
    Io in php ora dovrei crearmi quel processo (->) e non avrei problema per tutti i 5000 record, ma ho il dubbio che i tempi di risposta siano nell'ordine del minuto... anche perchè dovrei paginarli... e per paginarli dovrei fare un ciclo per sapere quanti sono e poi un ciclo per visualizzarli.
    Mi chiedevo se con una SP potevo fare il tutto ottenendo di conseguenza una tabella che poi con mysql_row e le solite cose visualizzo e pagino.
    la paginazione di mysql è inerentemente inefficiente, non è che ci sia molto da fare.
    potresti "materializzare" i risultati sotto forma di tabelle (es. MEMORY) al costo però di occupazione di memoria.

    ---
    Inizia con la regola d'oro: mai ottimizzare qualcosa... se non la misuri.
    Prima fai il "tuo" approccio, poi vedi come va, poi decidi cosa cambiare.

    Spesso si immagina di far bene... ma facendo male

  5. #5
    ahahah quella di non ottimizzare nulla mi piace
    Seguirò il tuo consiglio... e poi vedremo...
    La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.
    (Francisco Goya)
    ----------------------------------------
    http://www.mangioebevo.it
    http://www.definitives.org

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da rinosan_76bis
    ahahah quella di non ottimizzare nulla mi piace
    prima misura, poi ottimizza.
    è l'errore classico del dilettante "ottimizzare" prima, e misurare poi

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 © 2026 vBulletin Solutions, Inc. All rights reserved.