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

    Lettura da database con ottimizzazione struttura tabelle e query

    Ciao a tutti, ho un problema per ottimizzare le query de mio sito ma non so bene come strutturare la cosa...
    premesso io uso PDO e vorrei sapere se esiste qualche funzione particolare che ottimizza il tutto.. o un aproccio differente

    ho delle pagine che possono avere molti campi opzionali quindi creando delle uniche tabelle avrei molte celle vuote nel database e non sarebbero neanche sufficienti ... quindi avevo pensato una struttura cosi:

    Pagina( id, titolo, testo, autore )
    Pagina_Extra( idPagina, campo, valore )
    Pagina_Extra[idPagina] foreginKey Pagina[id]

    viene da s� notare che con questa struttura � possibile che una pagina pu� avere quanti campi extra si vuole e che possono esistere Pagina_Extra che si riferiscono alla stessa pagina con lo stesso campo e diverso valore: (se utilizzassi un unica tabella con molte celle che ammettono il valore null oltre ad avere una struttura grande e piena di "vuoti" non permetterebbe di avere celle con piu valori )

    il problema nasce quando voglio stampare tante pagine con i relativi valori extra una select del genere
    Select * from Pagina P left join Pagina_Extra E on P.id = E.idPagina Limit 50
    crea moltissime righe che poi andrebbero ciclate con while accorpate ed ovviamente il limit non si riferisce al numero di pagine ma al prodotto cartesiano tra le due tabelle ( creando una vista si potrebbe anche ottenere il numero di pagine corretto di risultati richiesti ma avrei comunque grandi numeri da ciclare )

    l'laternativa � quella di selezionare le pagine e per ognuna effetuare una query x� credo che questa opzione sia da escludere dato l'eccessivo numero di query che di dovrebbero fare...

    per questo mi chiedevo se esiste un modo per effettuare questa query che gi� di suo ragruppa in qualche modo tutti i valori associati di pagina extra senza doverli ciclare?
    www.nintendopower.it

  2. #2
    puoi fare un esempio dell'output che vorresti?

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    783
    Se ad ogni pagina nel tuo db corrisponde una pagina sul sito web, probabilmente devi farne vedere solamente una alla volta. In questo caso fai la query su quella pagina ed i relativi campi extra e sei tranquillo.

    Non credo che tu abbia la necessità di ricavare pagine multiple con tutti i loro campi all'interno della stessa query, però potrei aver capito male.

  4. #4
    Quote Originariamente inviata da optime Visualizza il messaggio
    puoi fare un esempio dell'output che vorresti?
    la tipologia dell'output non cambia moltissimo da un array o la un reference tipico dei risultati query... cmq una cosa del genere sarebbe ottima


    codice:
    Array ( [0] => Array ( 
                [id] => 1
                [titolo] => titoloUno        [testo] => testoUno
                [autore] => 11
                [extra] => Array       (
                      [immagine] => 342
                      [immagine] => 34
                      [categoria] => 1
                      [categoria] => 12
                      [categoria] => 13
                      )
                )
                [1] => Array( 
                      [id] => 2
                      [titolo] => titoloDue
                      [testo] => testoDue
                      [autore] => 11
                      [extra] => Array       (
                            [categoria] => 34dd2
                            [immagine] => 3df4
                            [categoria] => df
                            [banner] => 12
                            [opzione1] => 13
                            [opzione2] => ciaoo
                       )
                 )
    )
    ovviamente so che posso farlo con un prodotto cartesiano delle due tabelle ma come dicevo prima per stampare questi due risultati
    oltre ad avere quel piccolo problema del gestione del limit (risolvibile con IN all'interno della query) con una query del genere Select * from Pagina P left join Pagina_Extra E on P.id = E.idPagina where id in ( Select id from Pagina P2 ORDER by id Desc Limit 50 )

    vi è anche il problema del dover scansionare ogni risultato ottenuto e se si riferiscono alla stessa pagina inserire il campo negli extra quindi comunque due cicli while uno per raggruppare i risultati eduno per stamparli (per stampare l'esempio sopra riportato ci vogliono 11 righe )

    come detto in precedenza la soluzione per fare quello che voglio sarebbe questa ma vorrei sapere se c'e qualche soluzione più veloce e pratica che sia tramite PDO o con la query sql o altro
    www.nintendopower.it

  5. #5
    con ADO di Microsoft esisteva qualcosa che restituiva un oggetto strutturato in quel modo (ADO SHAPE), ma non è più supportato. Diciamo che è un comportamento tipico di DB no-SQL (tipo MongoDB). I recordset restituiti dai db relazionali sono piatti, oppure fai due query.

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