Visualizzazione risultati 1 fino 12 di 12

Discussione: [mySql] Unione di 2 query

  1. #1
    Guest

    Predefinito [mySql] Unione di 2 query

    Mentre ottimizzavo uno script mi sono capitate queste 2 query... Ho pensato di unirle in modo da risparmiare 1 query... Le 2 query sono:

    Codice:
    SELECT newsId,newsTitolo,newsTesto,newsLetture,newsData,newsAutore FROM news ORDER BY newsId DESC LIMIT 0,10
    e
    Codice:
    SELECT COUNT(*) AS totaleNews FROM news
    Come posso fare?

  2. #2
    Guest

    Predefinito

    Codice:
    SELECT newsId, newsTitolo, newsTesto, newsLetture, newsData, newsAutore, COUNT(*) AS totaleNews FROM news ORDER BY newsId DESC LIMIT 0,10
    prova cosi...

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da jostock
    Codice:
    SELECT newsId, newsTitolo, newsTesto, newsLetture, newsData, newsAutore, COUNT(*) AS totaleNews FROM news ORDER BY newsId DESC LIMIT 0,10
    prova cosi...
    Già fatto... Non va

  4. #4
    Guest

    Predefinito

    Se si fa così si incappa nell'errore mysql che vieta l'uso in select di funzioni di raggruppamento (qual è count() ) insieme a colonne, e richiede l'uso di GROUP BY colonna che in questo caso non aiuterebbe a risolvere il problema.

    Io lascerei query separate..
    se poi c'è qualche metodo per ovviare ben venga saperlo

  5. #5
    Guest

    Predefinito

    Umm, quindi la lascio così...

  6. #6
    Guest

    Predefinito

    diciamo che non è possibile fare ciò che vuoi

  7. #7
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Un'idea può essere questa: tieni la prima query (quasi) così com'è:
    Codice:
    SELECT newsId,newsTitolo,newsTesto,newsLetture,newsData,newsAutore
    FROM news
    ORDER BY newsId DESC
    poi, una volta che con PHP ottieni l'oggetto "risultato query", così:
    Codice:
    $result = mysql_query ($query, $db);
    te la puoi cavare con una semplice chiamata a:
    Codice:
    $nr_record = mysql_num_rows ($result);
    Piccolo inconveniente: la gestione delle pagine (tu hai messo la prima, ma secondo me ci saranno anche le altre dopo...), dovrai effettuarla attraverso PHP...

    Statemi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  8. #8
    Guest

    Predefinito

    Citazione Originalmente inviato da dementialsite
    Un'idea può essere questa: tieni la prima query (quasi) così com'è:
    Codice:
    SELECT newsId,newsTitolo,newsTesto,newsLetture,newsData,newsAutore
    FROM news
    ORDER BY newsId DESC
    poi, una volta che con PHP ottieni l'oggetto "risultato query", così:
    Codice:
    $result = mysql_query ($query, $db);
    te la puoi cavare con una semplice chiamata a:
    Codice:
    $nr_record = mysql_num_rows ($result);
    Piccolo inconveniente: la gestione delle pagine (tu hai messo la prima, ma secondo me ci saranno anche le altre dopo...), dovrai effettuarla attraverso PHP...

    Statemi bene...
    Ci avevo pensato anche io, ma non conviene... Cioè devo modificare tutto il codice php per fare una cosa del genere... E preferisco 1 query in più che 50 righe in più

  9. #9
    Guest

    Predefinito

    No infatti,
    la stavo proponendo anche io la proposta oscena
    ma appena notato il " LIMIT 0,10 " non mi sono azzardato ghghgh
    Senza dubbio meglio una query in più..

    O altrimenti, spezzando una lancia a favore della proposta oscena di prima, dovresti rivoluzionare il tutto fetchando tutti i risultati, ottenendo il count totale con la mysql_num_rows e poi mettendo tutti i record in una tua cache.. appositamente per venire incontro anche alla paginazione SENZA ogni volta rieseguire la query con il limit..
    giusto per la cronaca, ma capisco che è impegnativo assai :)

  10. #10
    Guest

    Predefinito

    Citazione Originalmente inviato da NoSpam
    No infatti,
    la stavo proponendo anche io la proposta oscena
    ma appena notato il " LIMIT 0,10 " non mi sono azzardato ghghgh
    Senza dubbio meglio una query in più..

    O altrimenti, spezzando una lancia a favore della proposta oscena di prima, dovresti rivoluzionare il tutto fetchando tutti i risultati, ottenendo il count totale con la mysql_num_rows e poi mettendo tutti i record in una tua cache.. appositamente per venire incontro anche alla paginazione SENZA ogni volta rieseguire la query con il limit..
    giusto per la cronaca, ma capisco che è impegnativo assai :)
    Io avevo pensato una cosa simile e appunto ho subito cancellato questa idea malata dalla mia mente...

  11. #11
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Citazione Originalmente inviato da neoscript
    Ci avevo pensato anche io, ma non conviene... Cioè devo modificare tutto il codice php per fare una cosa del genere... E preferisco 1 query in più che 50 righe in più
    Guarda che le modifiche non sono così pesanti... eccole:

    1. Aggiungi questo codice all'inizio della pagina:
    Codice PHP:
    <?php
    // imposta il record iniziale
    if (isset ($_GET['start']) && $_GET['start'] >= 0)
    $start = $_GET['start'];
    else
    $start = 0;

    // numero di record visualizzati
    $step = 10;
    ?>
    2. Fornisci da qualche parte dei link per passare alla pagina precedente e successiva:
    Codice PHP:
    <A HREF="?start=<?php echo ($start - $step); ?>">Precedente</A>
    <A HREF="?start=<?php echo ($start + $step); ?>">Successiva</A>
    3. Modifica così il ciclo di acquisizione dati:
    Codice PHP:
    $query = "SELECT ..." // la query di prima

    $result = mysql_query ($query);

    $i = 0;
    for (;
    $i < $start; $i++) mysql_fetch_array ();
    for (;
    $i < $start + $step && $i < mysql_num_rows ($result); $i++)
    {
    $line = mysql_fetch_array ($result);
    // elabora i record specificandoli con $line['nome_campo'];
    }
    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  12. #12
    Guest

    Predefinito

    Citazione Originalmente inviato da dementialsite
    Guarda che le modifiche non sono così pesanti... eccole:

    1. Aggiungi questo codice all'inizio della pagina:
    Codice PHP:
    <?php
    // imposta il record iniziale
    if (isset ($_GET['start']) && $_GET['start'] >= 0)
    $start = $_GET['start'];
    else
    $start = 0;

    // numero di record visualizzati
    $step = 10;
    ?>
    2. Fornisci da qualche parte dei link per passare alla pagina precedente e successiva:
    Codice PHP:
    <A HREF="?start=<?php echo ($start - $step); ?>">Precedente</A>
    <A HREF="?start=<?php echo ($start + $step); ?>">Successiva</A>
    3. Modifica così il ciclo di acquisizione dati:
    Codice PHP:
    $query = "SELECT ..." // la query di prima

    $result = mysql_query ($query);

    $i = 0;
    for (;
    $i < $start; $i++) mysql_fetch_array ();
    for (;
    $i < $start + $step && $i < mysql_num_rows ($result); $i++)
    {
    $line = mysql_fetch_array ($result);
    // elabora i record specificandoli con $line['nome_campo'];
    }
    Stammi bene...
    Ci farò un pensierino, per ora mi tengo quello che ho..

Regole di scrittura

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