dongqing4774 2013-07-28 09:54
浏览 23
已采纳

从多个mysql表中获取数据并以PHP(数组)显示

i have a moviesdb with tables

  1. movies table ;
  2. data table
  3. persons table
  4. characters table
  5. Modes table

MOVIES TABLE

===============================================
CODE : TITLE :        DESCRIPTION       YEAR
=====================================================
1      IRON MAN 3       xxxxx          2013
2      STAR WARS        xxxxx          2013

PERSONS TABLE

===============================================
CODE : NAME:                 BIRTH_DATE
=====================================================
1      SHANE BLACK         1965:04:04 00:00:00
2      ROBERT DOWNEY       1965:04:04 00:00:00
3      Gwyneth Paltrow     1965:04:04 00:00:00
4      Don Cheadle         1965:04:04 00:00:00

CHARACTERS TABLE

===============================================
PERSON  : NAME:             MOVIE
=====================================================
2      TONY STARK          1
3      PEPPER POTTS        1
4      Col. James Rhodes   1

MODES TABLE

===============================================
CODE : NAME : 
=====================================================
1      DIRECTOR 
2      WRITER
3      ACTOR
4      CHARACTER

DATA TABLE

===============================================
CODE : MOVIE :     PERSON   MODE
=====================================================
1      1             1       1
2      1             2       3 
3      1             3       3 
4      1             4       3 

FINAL ANSWER WOULD BE like :

===============================================
CODE : MOVIE TITLE :  DIRECTOR  :     ACTORS           CHARACTERS
=====================================================
1      IRON MAN 3     SHANE BLACK   Robert Downey Jr.   Tony Stark
                                    Gwyneth Paltrow     Pepper Potts
                                    Don Cheadle         Col. James 

MySQL command is :

SELECT 
  movies.title,
  movies.year,
  persons.name,
  modes.name,
  persons.birth_date,
  characters.name
FROM
  data
  INNER JOIN movies ON (data.movie = movies.code)
  INNER JOIN persons ON (data.person = persons.code)
  INNER JOIN modes ON (data.mode = modes.code)
  INNER JOIN characters ON (persons.code = characters.person)
  AND (characters.movie = data.movie)
WHERE
  MOVIES.code = '1'

SQL Command WORKS fine;

i am having problem with PHP CODE

$movie_query = mysql_query("
SELECT 
  movies.title,
  movies.year,
  persons.name,
  modes.name,
  persons.birth_date,
  characters.name
FROM
  data
  INNER JOIN movies ON (data.movie = movies.code)
  INNER JOIN persons ON (data.person = persons.code)
  INNER JOIN modes ON (data.mode = modes.code)
  INNER JOIN characters ON (persons.code = characters.person)
  AND (characters.movie = data.movie)
WHERE
  MOVIES.code = '1';");

WHILE ($rows = mysql_fetch_array($movie_query ))
{ 
    $movie_code = $rows['movies'.'code'];
    $movies_title = $rows['movies'.'title'];
    $movies_year = $rows['movies'.'year'];
    $movies_date_add = $rows['movies'.'date_add'];
    $movies_tagline = $rows['movies'.'tagline'];

    echo "$movie_code<br>$movies_title<br>$movies_year<br>$movies_date_add<br>$movies_tagline<br>";
}

any problem with my PHP CODE ..? ( seems SQL commands are not same as MySQL syntax )

  • 写回答

1条回答 默认 最新

  • dtq26360 2013-07-28 10:38
    关注

    1 you need to use PDO instead of using mysql see christian-giupponi comment above for insturctions on that

    2 you have a ";" in your sql statment that should be removed

    2 the results of your query do not include the table name

    3 you can't access data in the table unless you select it so $row['code'] would not work unless you ask for movies.code in your sql

    4 when you are selecting fields with the same name you need to reassign them or you will end up with something wrong

    $movie_query = mysql_query("
    SELECT 
        movies.code,
        movies.title,
        movies.year,
        persons.name as pname,
        modes.name as mname,
        persons.birth_date,
        characters.name as cname
    FROM
        data
        INNER JOIN movies ON (data.movie = movies.code)
        INNER JOIN persons ON (data.person = persons.code)
        INNER JOIN modes ON (data.mode = modes.code)
        INNER JOIN characters ON (persons.code = characters.person)
        AND (characters.movie = data.movie)
    WHERE 
        MOVIES.code = '1'
    ");
    
    WHILE ($rows = mysql_fetch_array($movie_query ))
    { 
        $movie_code = $rows['code'];
        $movies_title = $rows['title'];
        $movies_year = $rows['year'];
        $movies_date_add = $rows['date_add'];
        $movies_tagline = $rows['tagline'];
    
        echo "$movie_code<br>$movies_title<br>$movies_year<br>$movies_date_add<br>$movies_tagline<br>";
    }
    

    Good luck and Remember if you don't USE PDO now you will suffer for it later

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据