Помощ за mysql

SayliS

Registered
Искам да сравня movie_director = people_id и movie_leadactor = people_id така че да ми ги покаже в таблица по следния ред Име на филма, актьор, режисьор. Има ли как да стане това с 1 запитване. С този скрипт с 2 запитвания ги вадя, но $value1 ми вади 2воен резултат.

Код:
<?php 
$host "";
$user "";
$pass "";
$connect = mysql_connect($host, $user, $pass) or die ("Връзката неможе да бъде осъществена");
mysql_select_db("moviesite");
$query = "SELECT movie_name, people_fullname FROM movie LEFT JOIN people " . 
		  "ON movie_director = people_id " .   
		  "WHERE movie_year>1990 " .
		  "ORDER BY movie_name";
		  
$query1 = "SELECT  people_fullname FROM  people LEFT JOIN movie " . 
		  "ON movie_leadactor = people_id " . 		  
		  "WHERE movie_year>1990 " .
		  "ORDER BY movie_name";
		  
	$results = mysql_query($query) or die (mysql_error());
	$results1 = mysql_query($query1) or die (mysql_error());
echo "<table border =\"1\">\n";
while
(($row = mysql_fetch_assoc($results)) and  ($row1 = mysql_fetch_assoc($results1))) {
	echo "<tr>\n";
	foreach($row as $value ) foreach($row1 as $value1) {
		echo "<td>\n";
		echo $value;
		echo "</td>\n";
		echo "<td>\n";
		echo $value1;
		echo "</td>\n";
	}
	echo "</tr>\n";
}
echo "</table>\n";
?>
 
Slavei каза:
Дай структурата на двете таблици.

Код:
$movie = "CREATE TABLE movie (
	movie_id int(11) NOT NULL auto_increment,
    movie_name varchar(255) NOT NULL,
	movie_type tinyint(2) NOT NULL default 0,
	movie_year int(4) NOT NULL default 0,
	movie_leadactor int(11) NOT NULL default 0,
	movie_director int(11) NOT NULL default 0,
	PRIMARY KEY (movie_id),
	KEY movie_type (movie_type, movie_year)
	 )";
$results = mysql_query($movie) or die (mysql_error());

$people = "CREATE TABLE people (
	people_id int(11) NOT NULL auto_increment,
	people_fullname varchar(255) NOT NULL,
	people_isactor tinyint(1) NOT NULL default 0,
	people_isdirector tinyint(1) NOT NULL default 0,
	PRIMARY KEY (people_id)
	)";
$results = mysql_query ($people) or die (mysql_error());
 
това ли ти трябва?

Код:
<?php 
$host ""; 
$user ""; 
$pass ""; 
$connect = mysql_connect($host, $user, $pass) or die ("Връзката неможе да бъде осъществена"); 
mysql_select_db("moviesite"); 
$query = "SELECT movie_name, l.people_fullname as aktior, d.people_fullname as rejisior
/*със AS се задава псевдоним на колоната. В случая е нужно за да правиш разлика между двете колони, който в базата са с едно и също име.*/
FROM
	movie
	left join people l on (movie_leadactor = l.people_id)
	left join people d on (movie_director = d.people_id)
WHERE 
	movie_year > 1990
     ORDER BY movie_name asc"; 
/*със слагането на буква/дума след името на таблицата, задаваш псевдоним на таблицата...*/
  $results = mysql_query($query) or die (mysql_error()); 
echo "<table border =\"1\">\n"; 
  while ($row = mysql_fetch_array($result)) {
  $movie_name = $row['movie_name'];
  $aktior = $row['aktior'];
  $rejisior = $row['rejisior'];
  echo "<tr><td>".$movie_name."</td><td>".$aktior."</td><td>".$rejisior."</td></tr>\n"; 
  }
// точката съединява два стринга
echo "</table>\n"; 
?>

надявам се да схванеш как работи :)
 
Мерси много.

Използвах твоя код и го промених малко.
Код:
$connect = mysql_connect($host, $user, $pass) or die ("Връзката неможе да бъде осъществена");
mysql_select_db("moviesite");
	$query = "SELECT movie_name, l.people_fullname as actor, d.people_fullname as director FROM movie " . 
   			"LEFT JOIN people l ON (movie_leadactor = l.people_id) " .
   			"LEFT JOIN people d ON (movie_director = d.people_id) " .
			"WHERE movie_year>1990 ORDER BY movie_type";		    	  
	$results = mysql_query($query) or die (mysql_error());
echo "<table border =\"1\">\n";
while ($row = mysql_fetch_assoc($results)) {	
	echo "<tr>\n";
	foreach($row as $value)    {
		echo "<td>\n";
		echo $value;
		echo "</td>\n";		
	}
	echo "</tr>\n";
}
echo "</table>\n";
?>

btw твоя го извежда по същия начин след като променя $result-->$results


Мерси много за хелп-а :)
 
SayliS каза:
Мерси много.

Използвах твоя код и го промених малко.
Код:
$connect = mysql_connect($host, $user, $pass) or die ("Връзката неможе да бъде осъществена");
mysql_select_db("moviesite");
	$query = "SELECT movie_name, l.people_fullname as actor, d.people_fullname as director FROM movie " . 
   			"LEFT JOIN people l ON (movie_leadactor = l.people_id) " .
   			"LEFT JOIN people d ON (movie_director = d.people_id) " .
			"WHERE movie_year>1990 ORDER BY movie_type";		    	  
	$results = mysql_query($query) or die (mysql_error());
echo "<table border ="1">\n";
while ($row = mysql_fetch_assoc($results)) {	
	echo "<tr>\n";
	foreach($row as $value)    {
		echo "<td>\n";
		echo $value;
		echo "</td>\n";		
	}
	echo "</tr>\n";
}
echo "</table>\n";
?>

btw твоя го извежда по същия начин след като променя $result-->$results


Мерси много за хелп-а :)

копирал съм отнякъде реда с while цъкъла и не съм обърнал внимание. Приказата за мързеливото племе и програмистите май е истина ;)

пп
само не разбрах, защо накъсваш така заявката с кавичките и после я конкатенираш? И защо ползваш в случая foreach
 
за пп-то http://download.alexsoft.net/ 4-тата от ляво на дясно :) в момента се уча от нея(купих си е ) та там ги ползват със "." и от време на време ми идва като навик да го пиша така. А фореч защото се използваше в главаза за която права упражненията (сял и заявки към него).

Пак мерси много за хелп-а :) скоро може пак да питам ... :П
 

Back
Горе