Ввод расширенных SQL-запросов в таблицу - не уникальный псевдоним таблицы mysql - PullRequest
2 голосов
/ 04 декабря 2011

Я получаю сообщение об ошибке «Не уникальная таблица / псевдоним» при попытке отобразить данные из базы данных MySQL в таблицу. Предположим, что это как-то связано с внешними ключами.

Здесь SQL для создания таблиц, после слов вставляются некоторые значения. SQL работал нормально, никаких проблем не возникало, но я добавил код, поскольку все это идет рука об руку с отображением таблицы на экране.

CREATE TABLE city (
   id int not null primary key auto_increment,
   name varchar(30) not null
) type=innodb;

CREATE TABLE cinema (
   id int not null  primary key auto_increment,
   name varchar(50) not null,
   city int not null,
   foreign key(city) references city(id)
) type=innodb;

CREATE TABLE movie (
   id int not null primary key auto_increment,
   name varchar(30) not null
) type=innodb;

CREATE TABLE relationship (
   whattime time NOT NULL,
   whichdate date NOT NULL,
   movieid int not null,
   cinemaid int not null,
   primary key (cinemaid, movieid),
   foreign key(movieid) references movie(id),
   foreign key(cinemaid) references cinema(id)
) type=innodb;

INSERT INTO city (id, name) VALUES (1, 'Paris'), (2, 'Copenhagen'), (3, 'London'), (4, 'Lisbon') 
INSERT INTO movie (id, name) VALUES (1, 'The Church')
INSERT INTO cinema (id, name, city) VALUES (1, 'Pathé', 1), (2, 'Cinemaxx', 2), (3, 'Cineworld', 3), (4, 'ZON Lusomundo', 4)
INSERT INTO relationship (whattime, whichdate, movieid, cinemaid) VALUES ('21:00:00', '2011-12-27', 1, 1), ('19:30:00', '2011-12-28', 1, 2), ('20:00:00', '2011-12-27', 1, 3), ('21:00:00', '2012-01-02', 1, 4)

Вот php, который дает мне Не уникальная таблица / псевдоним: 'cinema' ошибка. Есть идеи, почему это так?

<?php
include "inc/mysql_con.php";
mysql_select_db($db) or die(mysql_error());

$query = "select city.name, cinema.name, movie.name, date, time from city, cinema, relationship, movie";
$query .= "where cinema.city = city.id";
$query .= "and cinemaid = cinema.id";
$query .= "and movieid = movie.name";
$query .= "order by date";
mysql_query($query) or die(mysql_error()); 

echo "<table id='premiere'>";
echo "<tr> <th>CITY</th> <th>CINEMA</th> <th>DATE</th> <th>TIME</th></tr>";
 while($result = mysql_fetch_array( $query )) {
    echo "<tr><td>"; 
    echo $result['city.name'];
    echo "</td><td>"; 
    echo $result['cinema.name'];
    echo "</td><td>";
    echo $result['date'];
    echo "</td><td>";
    echo $result['time'];
    echo "</td></tr>";
}
echo "</table>";    
?>

UPDATE: Теперь я получил правильный запрос sql, код ниже

SELECT city.name, cinema.name, whichdate, whattime
FROM city, cinema, relationship, movie
WHERE cinema.city = city.id
AND cinemaid = cinema.id
ORDER BY whichdate

Хорошо отображает таблицу в SQL, но не в PHP:

ОШИБКА: Предупреждение: mysql_fetch_array () ожидает, что параметр 1 будет ресурсом, значение NULL в content.php в строке 75
строка 75: while ($ query = mysql_fetch_array ($ result)) {

Помощь будет оценена.

1 Ответ

0 голосов
/ 04 декабря 2011

Похоже, что ваша конкатенация строк пропускает пробелы, поэтому первые две строки дадут ... кино, отношения, видение здесь cinema.city = city.id. В этом случае SQL дважды читает кино ... Может ли это быть так просто? Я бы повторил запрос перед отправкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...