Confronto su tabelle

  • Creatore Discussione Creatore Discussione lume70
  • Data di inizio Data di inizio

lume70

Nuovo Utente
20 Feb 2013
5
0
0
Ho 3 tabelle così formate
utenti
id---nome
1---pippo
2---pluto

articolo
id---nome---stato
1---pane----0
2---latte----1
3---caffè----1
4---sale-----0
5---acqua---1

marcatore
id---id_articolo----id_utente
1----3------------1
2----4------------1
3----3------------2

Devo poter far vedere gli articoli con stato=1 agli utenti e dopo che questi li hanno visto deve essere aggiunto un record nella tabella marcatore con id dell'articolo visionato e id dell'utente di modo che quell'utente nn possa più visionarlo.
Esempio
l'utente pippo (id=1) potrà vedere pane, latte, acqua perchè caffè e sale (id 3 e 4) sono presenti nella tabella marcatore e con id_utente=1 cioè pippo

Riesco a prelevare gli articoli con stato=1 poi non so come confrontarli con la tabella marcatore
PHP:
//prelevo solo gli articoli con stato=1
$risultato= mysql_query("SELECT * FROM articolo WHERE stato=1");
$risultato2=mysql_query("SELECT * FROM marcatore");

while($row = mysql_fetch_array( $risultato )) {
echo $row['nome'];
...
}
 
ciao
immagino che l'utente es pippo si debba loggare quindi da qualche parte prelevi il suo id
per cui prova con una query del tipo con cui pippo vede solo gli articoli stato=1 e che non ha ancora visto
PHP:
<?php
//...
$query="SELECT * FROM articoli AS a, marcatore AS m WHERE a.stato=1 AND m.d_utente != $id"
//....
?>
 
Con il tuo script credo non vada bene.
Ad esempio, se effettuo il controllo sull'articolo 3 con l'utente che ha id=1, secondo le tabelle sotto mi estrae 4 volte l'articolo 3.
Perchè la prima riga del marcatore non viene soddisfatta perchè m.id_utente =1, mentre le righe 3,4,5,6 hanno .mid_utente!=1
Invece l'articolo 3 per l'utente 1 non deve proprio comparire.
Perchè la prima riga di marcatore indica esplicitamente che l'utente 1 ha già visto l'articolo 3.

articolo
id---nome---stato
...
...
3---caffè----1


marcatore
id---id_articolo----id_utente
1----3------------1
2----4------------1
3----3------------2
4----3------------3
5----3------------4
6----3------------5
 
ciao
prova una cosa del genere
1) verifichi quali id articolo l'utente ha gia visto e ne fai un elenco
2) estrai gli articoli che non siano nell'elenco generato
PHP:
<?php
//......
$query="SELECT id_articolo FROM marcatore WHERE id_utente=$id";
$ris=mysql_query($query);
if(mysql_num_rows($ris)==0){
	$non_in="";
}else{
	while($riga=mysql_fetch_array($ris)){
		$elenco[]=$riga['id_articolo'];
	}
	$i=implode(",",$elenco);
	$non_in=" AND id NOT IN('$i')";//es AND id NOT IN('3,4') quindi estrai solo 1,2,5
}
$query="SELECT * FROM articoli WHERE stato='1' $non_in ORDER BY nome";
//....
?>
prova e sappimi dire

p.s.
ho usato le vecchie mysql perchè mi viene più facile, ma tu passa a mysqli o alla classe pdo
 

Discussioni simili