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

    selezionare dati tra due tabelle e prendere max valori

    Salve ragazzi!
    Sto creando un sito di news e sono arrivato al punto che a quanto pare si rivela il nocciolo ed anche la parte più complessa.

    questo è il sito imagelink.altervista.org che per ora uso per far delle prove online..la parte grafica è abbozzata e non finita.
    Sto cercando di dividere la index in 3 sezioni...

    1-la parte delle notizie più votate
    http://www.imagewak.com/images/2012/12/09/UAMG.png

    2-la parte delle notizie più votate nelle ultime 24 ore
    http://www.imagewak.com/images/2012/12/09/qx6de.png

    3- e la parte di tutte le notizie pubblicate giornalmente
    http://www.imagewak.com/images/2012/12/09/5ZwWB.png

    io dovrei creare una sorta di algoritmo per tutte e tre le sezioni..a scala diciamo.

    in tutte e tre devo far spuntare dall'alto verso il basso le notizie che sono state più votate

    tutte le notizie che gli utenti pubblicano vengono messi nella tabella "link" e i voti di ogni news vengono messi nella tabella "voting"

    quindi vorrei sapere come:

    -concatenare l'id di ogni news nella tabella "link" con i suoi voti dati nella tabella "voting" (devo usre left join o cosa?)

    -di conseguenza far apparire in maniera decrescente le news che hanno più voti

    spero di aver spiegato tutto per bene

  2. #2
    Il Left Join serve per unire due tabelle di cui però ti serve ottenere solo le informazioni della prima tabella (mi sembra sia il tuo caso):
    Codice PHP:
    SELECT *
    FROM link L
    LEFT JOIN voting V
    ON L
    .id V.id
    ORDER BY vote DESC 
    La stessa cosa viene fatta da questa query qui (con un normale join), dove in questo caso ricavo solo le informazioni di 'link':
    Codice PHP:
    SELECT L.*
    FROM link Lvoting V
    WHERE L
    .id V.id
    ORDER BY vote DESC 

  3. #3
    devo usre left join?
    Si, esatto, devi utilizzare la left join perchè se utilizzassi l'inner join estrarresti solo i records della tabella link che hanno il relativo record sulla tabella voting, quindi solo le notizie che hanno ricevuto un voto.
    Quindi la soluzione è:

    SELECT NOTIZIA, C_VOTI, S_VOTI FROM (
    SELECT L.notizia, count(V.id) C_VOTI, sum(V.vote) AS S_VOTI
    FROM link L LEFT JOIN voting V ON L.id = V.id
    GROUP BY L.notizia
    )
    ORDER BY C_VOTI, S_VOTI DESC

    dove C_VOTI è il conteggio dei voti ricevuti dalla notizia
    e S_VOTI è la somma dei voti ricevuti, se esiste un voto diverso (es: 2 stelle, tre stelle, ecc)

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.