selezionare dati tra due tabelle e prendere max valori

fabio_198

Utente Attivo
8 Nov 2012
53
0
0
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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
ti posto uno schema di come farei io, scrivo tutto di seguito poi lo dividi come ti serve e ipotizzo che le tabelle siano
tabella news
id
data
testo
tabella voti
id
id_news
voto
PHP:
<?php
//......
// news in ordine di voto
$q_v =mysql_query("SELECT * FROM voti ORDER BY voto DESC");//con o senza LIMIT
//mettendo nella query ... WHERE voto > 0...  estrai solo quelle con almeno un voto
while ($r_v=mysql_fetch_array($q_v)){
	$id=$r_v['id_news'];
	$q_n=mysql_query("SELECT * FROM news WHERE id=$id");
	$r_n=mysql_fetch_array($q_n);
	echo $r_n['testo']."<br />";
}
//news delle ultime 24 ore in ordine di voto
//non so come inserisci la data di inserimento, io uso sempre il timestamp, eventualmente traduci in altro formato
$ultime_24h=time()-(24*60*60);
$q_v =mysql_query("SELECT * FROM voti ORDER BY voto DESC");
while ($r_v=mysql_fetch_array($q_v)){
	$id=$r_v['id_news'];
	$q_n=mysql_query("SELECT * FROM news WHERE id=$id AND data >= $ultime_24h");
	$r_n=mysql_fetch_array($q_n);
	echo $r_n['testo']."<br />";
}
//tutte le news in data oggi
$oggi=explode("/",date("d/m/Y"));
$oggi_00=mktime(0, 0, 0, $oggi[1], $oggi[0], $oggi[2]);//calcolo il timestamp alle ore 0:0:0
$oggi_24=mktime(23, 59, 59, $oggi[1], $oggi[0], $oggi[2]);//calcolo il timestamp alle ore 23:59:59
$q_n=mysql_query("SELECT * FROM news WHERE id=$id AND data >= $oggi_00 AND data <= $oggi_24 ORDER BY data");// o usi BETWEN
while($r_n=mysql_fetch_array($q_n)){
	echo $r_n['testo']."<br />";
}
?>
adatta e prova, mal che vada non funzia
 

fabio_198

Utente Attivo
8 Nov 2012
53
0
0
intanto grazie per la risposta..poi vorrei chiederti una cosa prima di adattare il codice...cioè che non ho inserito il campo data.

praticamente nel form di invio news...devo inserire un campo "hidden" con data?...e nel db lo creo solamente con nome "data" e tipo "data"?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
intanto una cosa: per quello che vuoi fare il campo data è indispensabile
poi
come tipo dipende dal formato che usi, come ti ho detto io uso il timestamp quindi setto il campo data ad int(15) (non date o simili), a mio parere usare il timestamp risolve più problemi.
per mettere la data di inserimento della news non ti serve un compo hidden nel form, ma prima di fare l'INSERT dbasta che tu la legga e la salvi, es.
PHP:
<?php
$data_ins=time(); //se usi il timestamp
//oppure $data_ins =date("Y/m/d H:i:s"); // formato americano, se vuoi usare la data umana poi trasformarla in italiano d/m/Y
$query "INSERT INTO tabella (.....,data'...) VALUES(.....,'$data'...)";
?>
stai attento che se usi il formato d/m/Y puoi avere dei problemi perhè es. la data 15/03/2012 ti risulta maggiore di 01/12/2012 sballando l'eventuale ordinamento dei record per data (col timestamp o con formato Y/m/d eviti questo problema)
 

fabio_198

Utente Attivo
8 Nov 2012
53
0
0
@borgo italia

ho provato ma senza successo il codice che mi hai postato ..quello delle ultime 24h...non che non funziona...ma il problema è che io già faccio un while per estrarmi i dati dlla tabella...ecco:

$query = mysql_query("SELECT * FROM link WHERE categoria='politics' ORDER BY id DESC LIMIT 4");
while ($list = mysql_fetch_array($query)) {
$indurl = $list['url'];
$indimg = $list['img'];
$indtitolo = $list['titolo'];
$postid = $list['id'];
echo "

come faccio ad adattare quel pezzo di codice che mi hai scritto tu? si può fare un while dentro un altro while? :book:
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
ho provato ma senza successo il codice che mi hai postato ..quello delle ultime 24h...non che non funziona...ma il problema è che io già faccio un while per estrarmi i dati dlla tabella...ecco:
se non hai il campo data come fai ad estrarre quelle delle ultime 24 ore?
 

fabio_198

Utente Attivo
8 Nov 2012
53
0
0
l'avevo già inserito ieri prima di scrivere sul forum con timestamp...e la inserivo con NOW()

ora ho cambiato come mi hai detto tu...ho fatto un semplice campo int(15) e il risultato che mi da quando inserisco ovviamente è 1355135287

ho provato a unire le query e ora FORSE mi sa che funge

PHP:
$ultime_24h=time()-(24*60*60);
$query = mysql_query("SELECT * FROM link INNER JOIN voting ON link.id=voting.item WHERE categoria='politics' AND linkdate >= $ultime_24h ORDER BY vote DESC LIMIT 4");
                                                while ($list = mysql_fetch_array($query)) {
                                                        $indurl = $list['url'];
                                                        $indimg = $list['img'];
                                                        $indtitolo = $list['titolo'];
                                                        $postid = $list['id'];                        
                                                echo "
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
se funge ok, mi sembra corretta (dico mi sembra perche non so come sono strutturate le tue tabelle)
comunque da quekllo che ho capito nella tabella link il campo data si chiama linkdate, se vuoi visualizzare la data in formato "umano"
PHP:
<?php
//....
 $post_data = date( "d/m/Y H:i:s",$list['linkdate']);
 //...
?>
 

fabio_198

Utente Attivo
8 Nov 2012
53
0
0
perfetto!

senti un ultima cosa..nel caso voglio far apparire le news più votate di ieri al posto delle ultime 24h?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
basta che tu tolga un giorno al timestamp calcolato
ho cambiato i nomi delle variabili per evidenziarle e ordinare per voto
PHP:
<?php
//......
$oggi=explode("/",date("d/m/Y"));//estrai sempre la data odiera
//poi al timestamp togli un giorno = 24h x 60min x 60sec
$ieri_00=mktime(0, 0, 0, $oggi[1], $oggi[0], $oggi[2])-(24*60*60);//calcolo il timestamp alle ore 0:0:0
$ieri_24=mktime(23, 59, 59, $oggi[1], $oggi[0], $oggi[2])-(24*60*60);//calcolo il timestamp alle ore 23:59:59
$q_n=mysql_query("SELECT * FROM news WHERE id=$id AND data >= $ieri_00 AND data <= $ieri_24 ORDER BY voto DESC");// o usi BETWEN 
//.....
?>
 
Discussioni simili
Autore Titolo Forum Risposte Data
M Selezionare dati tra due tabelle Database 3
M Selezionare dati tra due tabelle PHP 1
S [PHP] Selezionare dati in intervallo di tempo PHP 21
M [PHP] selezionare dati da db e fare confronti PHP 0
M Tabella PHP con sorgente dati csv: selezionare le riche e compilare Form eMail PHP 1
T selezionare dati da mysql mediante form PHP 12
D selezionare solo dati non presenti in entrambe le tabelle PHP 5
B Selezionare un'immagine e salvare la selezione Photoshop 3
S Selezionare ultimo record di una sotto query MySQL 27
M Come selezionare e deselezionare radiobutton con jquery jQuery 1
Y Vorrei selezionare un colore di sfondo per una pagina web Javascript 0
S Upload file senza doverlo selezionare PHP 2
S Selezionare e deselezionare checkbox Javascript 0
M [PHP] Selezionare immagini directory non presenti in db PHP 11
S [PHP] selezionare colonna tabella utilizzando un array PHP 1
S [PHP] Selezionare i campi non in comune con le altre colonne della tabella PHP 4
L [PHP] CHECKBOX DA SELEZIONARE IN UNA TABELLA PHP 4
S [PHP] selezionare colonne in comune con un altra tabella PHP 5
T selezionare terza colonna della relatica row Database 2
G [Javascript] Selezionare una checkbox in maniera condizionata Javascript 5
G [PHP] Selezionare OGGI anno precedente per query sql PHP 2
A [RISOLTO] PHP Selezionare tutti i file con stessa estensione PHP 2
otto9due Selezionare singoli giorni su datepiker jQuery 1
gandalf1959 Selezionare un intervallo tra due date, php e mysql PHP 2
L [PHP] selezionare righe di una tabella con le checkbox e cancellarle PHP 2
R [Photoshop] Selezionare elemento in immagine ed esportarlo Photoshop 3
S [PHP] Selezionare ultimo campo ed escludere doppioni PHP 16
S [PHP] Selezionare tutte le colonne meno due PHP 6
asevenx Selezionare elementi da un elenco in modo dinamico e inviarli al database PHP 0
C selezionare distinti id e sommare uguali PHP 1
asevenx Realizzare modulo per selezionare elementi da una lista PHP 1
M Selezionare un risultato ogni 10 da select MySQL 4
L [php e mysql] selezionare sia i selezionati e i non selezionati PHP 1
M Selezionare un record da una tabella continua MS Access 0
H Selezionare la versione di Access Runtime in base all' applicazione MS Access 0
H Selezionare la versione di Access Runtime in base all' applicazione MS Access 0
F Selezionare voce di menu attiva HTML e CSS 1
asevenx selezionare prossima data da database PHP 2
T selezionare un campo da un db con radio button PHP 0
P Impossibile selezionare il database PHP 7
P impossibile selezionare il database PHP 0
felino Selezionare le colonne con una certa condizione PHP 2
S Selezionare files con drag and drop prima di upload PHP 0
F selezionare puntatore google engine Javascript 0
L Selezionare query da menu a tendina MS Access 2
M Selezionare quantità spostando una "barra" Javascript 5
M Selezionare un campo alla volta su un ciclo while PHP 47
S Selezionare campi da una tabella,vincolati da un'altra tabella Database 4
neo996sps [FORM] selezionare solo file con estensione MP3 HTML e CSS 2
D Selezionare tutti i checkbox di un form con jQuery jQuery 1

Discussioni simili