Aggiornare campo da un altro campo

Alex_70

Utente Attivo
13 Nov 2018
371
14
18
HELL
Buongiorno

quello che vorrei ottenere e' molto complicato, o forse no,
il campo years_start (varchar) dovrebbe visualizzare i dati in base all'anno (year) del primo film e dell'ultimo film (se e' presente)

esempio:

lista film:

sshot-1.png


risultati:

years_start = 1970 - 1980 (in caso di 2 film)

oppure

years_start = 1970 (in caso di un film) o 1980 (in base a quello presente)


years_start = 1970 - 1990 se sono presenti 3 anni (Year) 1970 - 1980 - 1990 (quindi primo e ultimo)

il campo years_start si trova nella tabella actor,

year nella tabella film

actor e film sono collegati da film_actor (sicuramente qui ci vorra' un inner join per la query)


Struttura

Tabella actor

years_start varchar(250)


Tabella film

year year(4)


Tabella film_actor

actor_id

film_id


GRAZIE A TUTTI
 
Ultima modifica:
piccolo avanzamento, con questa query mi restituisce il while del campo year nella scheda actor,

sshot-2.png


ma non e' quello che voglio ottenere

adesso bisogna passare il valore del film 1970 e quello dell'ultimo 1990 e restituirlo nel campo years_start
cosi

years_start =
1970 - 1990


PHP:
<?php

require_once("connetti.php");

$actor_id = $_GET['id'];

$query = "SELECT
film.year  as film_year,
film.film_id as film_id,
actor.actor_id as actor_id,
actor.years_start as years_start
FROM film_actor
INNER JOIN film ON film_actor.film_id = film.film_id
INNER JOIN actor ON film_actor.actor_id = actor.actor_id
WHERE film_actor.actor_id = " . $actor_id;

$result = mysql_query( $query );
if (!$result)
die("mySQL error: ". mysql_error());
while( $row = mysql_fetch_object( $result ) ) : ?>




<p class="bioheading">Year Start</p><p class="biodata">
<?php echo $row->film_year; ?><?php echo $row->years_start; ?>
</p>

<? endwhile; ?>
 
query riscritta, sicuramente da migliorare qui perche nel codice della pagina da errore

PHP:
WHERE film_actor.actor_id = " . $actor_id;

adesso ottengo il primo anno e l'ultimo :)

sshot-4.png


sshot-5.png

solo che adesso non so come inserire questi dati nel campo :rolleyes:

SQL:
(SELECT
year
FROM film_actor
INNER JOIN film ON film_actor.film_id = film.film_id
INNER JOIN actor ON film_actor.actor_id = actor.actor_id
WHERE film_actor.actor_id = 40
ORDER BY year ASC
LIMIT 1)

UNION ALL

(SELECT
year
FROM film_actor
INNER JOIN film ON film_actor.film_id = film.film_id
INNER JOIN actor ON film_actor.actor_id = actor.actor_id
WHERE film_actor.actor_id = 40
ORDER BY year DESC
LIMIT 1)
 
un lampo di genio mi ha illuminato, ho usato gli alias, :p questa funziona ma ci sono degli aggiustamenti da fare


1)
se l'anno e' sempre uguale mi restituisce per esempio
2019
2019

dovrebbe escludere dal codice l'ultimo

2)

vorrei visualizzare il risultato invece di cosi

sshot-6.png

in questo modo allineato

1960 - 1990

3)

penso che il campo nel database aggiuntivo che ho creato non serva piu'


PHP:
<?php

require_once("connetti.php");

$actor_id = $_GET['id'];

$query = "(SELECT
year as year_asc
FROM film_actor
INNER JOIN film ON film_actor.film_id = film.film_id
INNER JOIN actor ON film_actor.actor_id = actor.actor_id
WHERE film_actor.actor_id = $actor_id
ORDER BY year ASC
LIMIT 1)

UNION ALL

(SELECT
year as year_desc
FROM film_actor
INNER JOIN film ON film_actor.film_id = film.film_id
INNER JOIN actor ON film_actor.actor_id = actor.actor_id
WHERE film_actor.actor_id = $actor_id
ORDER BY year DESC
LIMIT 1)";

$result = mysql_query( $query );
if (!$result)
 die("mySQL error: ". mysql_error()); 
while( $row = mysql_fetch_object( $result ) ) : ?> 




<p class="bioheading">Year Start</p><p class="biodata">
<?php echo $row->year_asc - $row->years_desc; ?>
</p>

<? endwhile; ?>
 
risolto :p


adesso nessun duplicato, cambiando UNION ALL con UNION

sshot-2.png


solo che visualizzo il trattino alla fine dopo 1990 :rolleyes: come eliminarlo?

sshot-1.png



codice completo

PHP:
require_once("connetti.php");

$actor_id = $_GET['id'];

$query = "(SELECT
MIN(year) as year_min
FROM film_actor
INNER JOIN film ON film_actor.film_id = film.film_id
INNER JOIN actor ON film_actor.actor_id = actor.actor_id
WHERE film_actor.actor_id = $actor_id
LIMIT 1)

UNION

(SELECT
MAX(year) as year_max
FROM film_actor
INNER JOIN film ON film_actor.film_id = film.film_id
INNER JOIN actor ON film_actor.actor_id = actor.actor_id
WHERE film_actor.actor_id = $actor_id
LIMIT 1)";

$result = mysql_query( $query );
if (!$result)
 die("mySQL error: ". mysql_error()); 
while( $row = mysql_fetch_object( $result ) ) : ?> 




<?php echo $row->year_min .'&nbsp;-'.  $row->year_max; ?>


<? endwhile; ?>
 
solo che visualizzo il trattino alla fine dopo 1990 :rolleyes: come eliminarlo?
se c'è il trattino anche dopo il secondo anno mi sa che significa che invece di prendere una volta year_min e year_max, dato che c'è un while prende due volte year_min...
puoi mettere una foto di cosa succede eseguendo la query che hai messo su phpmyadmin?
 
Ciao Tommy :)

questo e' il risultato della query eseguita su phpmyadmin

sshot-1.png

la lista dei film di id 40

sshot-2.png
 
ok allora prova a cambiare da cosi
PHP:
require_once("connetti.php");

$actor_id = $_GET['id'];

$query = "(SELECT
MIN(year) as year_min
FROM film_actor
INNER JOIN film ON film_actor.film_id = film.film_id
INNER JOIN actor ON film_actor.actor_id = actor.actor_id
WHERE film_actor.actor_id = $actor_id
LIMIT 1)

UNION

(SELECT
MAX(year) as year_max
FROM film_actor
INNER JOIN film ON film_actor.film_id = film.film_id
INNER JOIN actor ON film_actor.actor_id = actor.actor_id
WHERE film_actor.actor_id = $actor_id
LIMIT 1)";

$result = mysql_query( $query );
if (!$result)
 die("mySQL error: ". mysql_error()); 
while( $row = mysql_fetch_object( $result ) ) : ?> 




<?php echo $row->year_min .'&nbsp;-'.  $row->year_max; ?>


<? endwhile; ?>
A cosi
PHP:
require_once("connetti.php");

$actor_id = $_GET['id'];

$query = "SELECT
MIN(year) as year_min, MAX(year) as year_max
FROM film_actor
INNER JOIN film ON film_actor.film_id = film.film_id
INNER JOIN actor ON film_actor.actor_id = actor.actor_id
WHERE film_actor.actor_id = $actor_id
LIMIT 1";

$result = mysql_query( $query );
if (!$result)
 die("mySQL error: ". mysql_error()); 
while( $row = mysql_fetch_object( $result ) ) : ?> 




<?php echo $row->year_min .'&nbsp;-'.  $row->year_max; ?>


<? endwhile; ?>
 
  • Like
Reactions: Alex_70
funziona eliminando il trattino alla fine pero' nel caso di film con l'anno unico restituisce il duplicato

cosi

2019 -2019

e non va bene, dovrebbe essere cosi

2019 -
 
Questo:
PHP:
<?php echo $row->year_min .'&nbsp;-'.  $row->year_max; ?>
Prova a cambiarlo cosi
PHP:
<?php
if($row->year_min != $row->year_max){
echo $row->year_min .'&nbsp;-'.  $row->year_max;
}else{
echo $row->year_min;
}
?>
 
  • Like
Reactions: Alex_70
errore

Parse error: syntax error, unexpected end of file in E:\OpenServer\domains\localhost\cinema\members\year_start.php on line 50

line 50 e dopo la fine del php block
?>
 
sorry, ho sbagliato io, non ho inserito endwhile alla fine :D

cosi funziona,

ho dovuto inserire il codice in alto perche' se lo inserisco in un altro punto azzera le altre informazioni, molto strano

Grazie Tommy ;)

PHP:
require_once("connetti.php");

$actor_id = $_GET['id'];

$query = "SELECT
MIN(year) as year_min, MAX(year) as year_max
FROM film_actor
INNER JOIN film ON film_actor.film_id = film.film_id
INNER JOIN actor ON film_actor.actor_id = actor.actor_id
WHERE film_actor.actor_id = $actor_id
LIMIT 1";

$result = mysql_query( $query );
if (!$result)
die("mySQL error: ". mysql_error());
while( $row = mysql_fetch_object( $result ) ) : ?>






<?php
if($row->year_min != $row->year_max){
echo $row->year_min .'&nbsp;-'.  $row->year_max;
}else{
echo $row->year_min;
}
?>

<? endwhile; ?>
 
Ultima modifica:
Tommy ciao, si puo' visualizzare un warning in caso i campi sono vuoti?

PHP:
<?php
if($row->year_min != $row->year_max){
echo '<font color="red">' . $row->year_min . '</font>'.  '&nbsp;-&nbsp;'. '<font color="blue">'  . $row->year_max  . '</font>' ;
}else{
echo '<font color="red">' . $row->year_min . '</font>';
}
?>

Grazie
 
PHP:
<?php
if($row->year_min =="" AND $row->year_max==""){
echo "Campo vuoto";
}else{
if($row->year_min != $row->year_max){
echo '<font color="red">' . $row->year_min . '</font>'. '&nbsp;-&nbsp;'. '<font color="blue">' . $row->year_max . '</font>' ;
}else{
echo '<font color="red">' . $row->year_min . '</font>';
}
}
?>
 
  • Like
Reactions: Alex_70

Discussioni simili