Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 16 su 16
  1. #11
    Originariamente inviato da SGr33n
    Grazie allora ci provo subito... ma non c'è un modo per bloccare anche la ricerca al primo risultato trovato? non vorrei appesantire troppo la query in questo modo.
    si torna alla questione di prima.... non ti spieghi correttamente
    codice:
    SELECT thread.*, replies.postid AS replied 
    FROM thread 
    LEFT JOIN (replies) ON (replies.threadid = thread.threadid AND replies.userid = $loggeduser)
    Significa: tutti i thread della tabella thread
    che hanno il threadid uguale nella tabella replies
    dove lo userid della tabella replies e' $loggeduser

    Quindi ti tira fuori tutti i record dove $loggeuser ha dato una risposta, ma solo le sue risposte.

    Se vuoi solo le risposte di $loggeduser ad un dato valore di threadid, devi fornire il threadid.

    codice:
    SELECT thread.*, replies.postid AS replied 
    FROM thread 
    LEFT JOIN replies ON replies.threadid = thread.threadid 
    WHERE thread.threadid = $threadid
    AND replies.userid = $loggeduser

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  2. #12
    Intendo più risultati dalla query principale... cioè se uso il limit 1 alla fine della query mi verrà restituito solo un campo dalla tabella thread. Posso fare in modo che il limit agisca solo sulla tabella replies ?
    SGr33n

  3. #13
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    595
    Rilassati... non serve. Se usi correttamente le chiavi e il "group by" (quindi threadid+userid è un index nella tablla replies e threadid è primary key della tabella threads) , la query non è affatto pesante perchè COMUNQUE ti tira fuori solu UNA riga per ogni threadid (cosa che tu vuoi) e della replies fa solo un "count", che se fatto su chiave indicizzata non affatto tanto

    Certo... se i record da tirare fuori sono 1 milione la cosa può rompere... ma per quello puoi usare un limit (tanto quanti ne vuoi vedere in una pagina? 10? 50? 100? non credo di più no?) che con il group by funziona benissimo lo stesso

  4. #14
    Si, i risultati della query principale sono suddivisi in pagine, quindi per ogni pagina vengono estrapolati 20 thread. Il problema è che la tabella replies è molto grossa, ed usando questa query non ci sarebbero limiti nella ricerca, nonostante la chiave sia indicizzata.

    Quindi il limit sulla tabella replies non serve ?
    SGr33n

  5. #15
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    595
    Non si mette "limit sulla tabella secondaria"
    MEtti limit 20 alla query stessa
    Una cosa del genere
    Codice PHP:
    <?php
    $limit 
    20;
    $start = isset($_GET["start"]) ? $_GET["start"] : 0;
    $nextpage $start+$limit;
    $query "
    SELECT thread.*, count(thread.threadid)
    FROM thread
    LEFT JOIN (replies)
    ON (replies.threadid = thread.threadid AND replies.userid = 
    $loggeduser)
    GROUP BY thread.threadid
    LIMIT (
    $start,$limit)";
    // esecuzione della query con visualizzazione annessa
    ?>
    [url="?start=<?php echo $nextpage?>"]Pagina successiva[/url]
    Vedrai che la query va che è una spada se threadid+userid sono "index" della tabella replies e threadid è primary key della tabella threads

  6. #16
    Oki Grazie 1000 Leilond
    SGr33n

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.