Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: База данных: 2 таблицы и вывод информации...
 
 автор: romjke2012   (11.04.2010 в 11:25)   письмо автору
 
 

Всем доброго времени суток.
Ситуация: есть Иванов Иван Иванович, он занесен в таблицу "books", в которой содержится полная информация о книгах (порядковый номер, количество страниц, тип обложки и т. п.), как автор одной из них в соответствующую ячейку "director".
Есть другая таблица - "directors", в которой существует абсолютно аналогичная ячейка "director" и в ней так же имеется Иванов Иван Иванович + другие ячейки с дополнительной информацией о авторе (возраст, место проживания).
Вопрос: нужно, чтобы в ячейку второй таблицы "directors", которая отвечает за последнюю на сегодняшний день книгу автора (назовем ее "lastbook"), попадала актуальная на сегодняшний день его книга из таблицы "books" и (в конечном итоге) выводилась, как ссылка на странице с данными автора в поле "Последняя книга автора".

Вот мое "виденье", как это все должно выглядеть:
<?php $reslast mysql_query ("SELECT id,title FROM books WHERE director='$director' DESC LIMIT 1",$db);
        if (!
$reslast)
        {
            echo 
"<p>Выбранный Вами автор не имеет ни одной написанной книги.</p>";
            exit (
mysql_error ());
            }
            if (
mysql_num_rows ($reslast) > 0)
            {
                
$datalast mysql_fetch_array ($reslast);
                echo 
$datalast;
                }
                else
                {
                    echo 
"<p>Нет записей, отвечающих Вашему запросу.</p>";
                    exit ();
                    }
                    
$reslast mysql_query ("INSERT INTO directors (lastbook) VALUES ('$datalast')",$db);?>

  Ответить  
 
 автор: Trianon   (11.04.2010 в 11:42)   письмо автору
 
   для: romjke2012   (11.04.2010 в 11:25)
 

Вы не привели структуры таблиц.
SHOW CREATE TABLE books;
SHOW CREATE TABLE directors;

Но уже сейчас можно сказать, что Вы не пользуетесь первичными ключами таблиц. А это неправильно.
Чужие ключи в связях таблиц стоит выбирать по первичным.

  Ответить  
 
 автор: romjke2012   (11.04.2010 в 13:28)   письмо автору
 
   для: Trianon   (11.04.2010 в 11:42)
 

Таблица "books"
CREATE TABLE `books` (
 `id` int(6) NOT NULL AUTO_INCREMENT,
 `meta_d` varchar(255) NOT NULL,
 `meta_k` varchar(255) NOT NULL,
 `genre` varchar(20) NOT NULL,
 `year` varchar(4) NOT NULL,
 `title` varchar(50) NOT NULL,
 `director` varchar(200) NOT NULL,
 `studio` varchar(40) NOT NULL,
 `size` varchar(5) NOT NULL,
 `text` text NOT NULL,
 `texta` varchar(250) NOT NULL,
 `imgmini` varchar(150) NOT NULL,
 `img` varchar(150) NOT NULL,
 `rate` int(10) NOT NULL DEFAULT '6',
 `vote` int(10) NOT NULL DEFAULT '1',
 `date` datetime NOT NULL,
 `view` int(10) NOT NULL DEFAULT '0',
 `poster` varchar(200) NOT NULL,
 `check` int(1) NOT NULL DEFAULT '0',
 `new` int(1) NOT NULL,
 PRIMARY KEY (`id`),
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=cp1251


Таблица "directors"
CREATE TABLE `directors` (
 `id` int(5) NOT NULL AUTO_INCREMENT,
 `rname` varchar(200) NOT NULL,
 `ename` varchar(200) NOT NULL,
 `meta_d` varchar(255) NOT NULL,
 `meta_k` varchar(255) NOT NULL,
 `photo` varchar(150) NOT NULL,
 `age` varchar(50) NOT NULL,
 `place` varchar(50) NOT NULL,
 `studio` varchar(40) NOT NULL,
 `lastm` varchar(50) NOT NULL,
 `firstm` varchar(50) NOT NULL,
 `movsum` int(2) NOT NULL,
 `award` varchar(255) NOT NULL DEFAULT 'Нет',
 PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251

  Ответить  
 
 автор: Trianon   (11.04.2010 в 13:32)   письмо автору
 
   для: romjke2012   (11.04.2010 в 13:28)
 

директор у книги один?
Тогда что Вам мешает воткнуть в таблицу books поле director_id?

Кстати, почему директор?

  Ответить  
 
 автор: romjke2012   (11.04.2010 в 15:47)   письмо автору
 
   для: Trianon   (11.04.2010 в 13:32)
 

Видимо потому что у меня вот таким образом он выводится:
<a href="viewdirector.php?=<?php echo $data['director'?>"><?php echo $data['director'?>

и соответственно передается в строке браузера в таком, например, виде:
http://localhost/.../viewdirector.php?=Heikki%20Hesesses%20Lampinen

Затем эта переменная должна быть обработана спец. функциями для избавления от лишних символов (таких как %20) и сравнивается с подобным полем во второй таблице "directors", после чего происходит вывод всех данных, которые "завязаны" на этой переменной.

  Ответить  
 
 автор: Trianon   (11.04.2010 в 17:20)   письмо автору
 
   для: romjke2012   (11.04.2010 в 15:47)
 

Да, но почему директор, а не, например, боксер?

  Ответить  
 
 автор: Trianon   (11.04.2010 в 17:24)   письмо автору
 
   для: romjke2012   (11.04.2010 в 15:47)
 

>Видимо потому что у меня вот таким образом он выводится:
если у вас эти данные выводятся в таком виде
>
<a href="viewdirector.php?=<?php echo $data['director'?>"><?php echo $data['director'?>


то браузеру попадет не
>
http://localhost/.../viewdirector.php?=Heikki%20Hesesses%20Lampinen

а
http://localhost/.../viewdirector.php?=Heikki Hesesses Lampinen

и это будет нарушение.

потому что браузеру действительно требуется закодированные данные.
вот такие:
viewdirector.php?=Heikki%20Hesesses%20Lampinen



>Затем эта переменная должна быть обработана спец. функциями для избавления от лишних символов (таких как %20) и сравнивается с подобным полем во второй таблице "directors", после чего происходит вывод всех данных, которые "завязаны" на этой переменной.
А вот это уже полнейшая чушь. Попробуйте вывести значение переменной - убедитесь, что никаких специальных преобразований делать не нужно. А следовательно - нельзя.
Правда для этого сперва нужно эту строку переменной присвоить.

  Ответить  
 
 автор: Slo_Nik   (11.04.2010 в 11:46)   письмо автору
 
   для: romjke2012   (11.04.2010 в 11:25)
 

даже если автор не имеет ни одной книги это не сработает


<?php
........................................................................................................
echo 
"<p>Выбранный Вами автор не имеет ни одной написанной книги.</p>"
            exit (
mysql_error ());.
...............................................................................................................
?>


сработает при ошибке выполнения запроса

  Ответить  
 
 автор: romjke2012   (04.05.2010 в 18:31)   письмо автору
 
   для: Slo_Nik   (11.04.2010 в 11:46)
 

Хотел еще раз спросить у "знающих" людей:
возможно ли обработать такую переменную (избавится от символов, как, например %20)
http://localhost/.../viewdirector.php?director=Heikki%20Hesesses%20Lampinen
,
чтобы в итоге использовать ее как $_GET['director'] для последующего открытия страницы автора конструкцией вида
<a href="viewdirector.php?director=<?php echo $data['director'?>"><?php echo $data['director'?>

Заранее спасибо!

  Ответить  
 
 автор: root   (04.05.2010 в 18:38)   письмо автору
 
   для: romjke2012   (04.05.2010 в 18:31)
 

Вы пробовали выводить
<? echo $_GET['director'
?

там присутствует что-то, что Вам мешает?

  Ответить  
 
 автор: romjke2012   (04.05.2010 в 20:30)   письмо автору
 
   для: root   (04.05.2010 в 18:38)
 

Не пробовал, но думаю возникнут сложности.
Хорошо, а в запросе таком что указывать?
<?php ...FROM table WHERE director='ЧЕМУ?'... ?> 

  Ответить  
 
 автор: root   (04.05.2010 в 20:35)   письмо автору
 
   для: romjke2012   (04.05.2010 в 20:30)
 

>Не пробовал, но думаю возникнут сложности.

Вы попробуйте..

>Хорошо, а в запросе таком что указывать?
>
<?php ...FROM table WHERE director='ЧЕМУ?'... ?> 


очевидно, значение переменной (обработанной соответствующими функциями для вставки в код SQL-запроса).

  Ответить  
 
 автор: romjke2012   (04.05.2010 в 20:43)   письмо автору
 
   для: root   (04.05.2010 в 20:35)
 

>Вы попробуйте..
Спасибо. Попробовал и все заработало, то есть ссылка вида
http://localhost/.../viewgenre.php?genre=One%20Man%20Show%20Movie

после нехитрого маневра
$genre = $_GET['genre'];

в запросе
$result = mysql_query ("SELECT id,genre,...,date FROM table WHERE genre='$genre'... 

отлично сработала и ответила тем результатом, который был необходим.
>...обработанной соответствующими функциями для вставки в код SQL-запроса
Вот, кстати, да. Хотелось бы узнать, может все-таки необходима какая-нибудь обработка?
Спасибо, root

  Ответить  
 
 автор: root   (04.05.2010 в 20:50)   письмо автору
 
   для: romjke2012   (04.05.2010 в 20:43)
 

Тогда Вам в поиск :-)

get_magic_quotes_gpc
stripslashes
mysql_real_escape_string

  Ответить  
 
 автор: romjke2012   (04.05.2010 в 20:57)   письмо автору
 
   для: root   (04.05.2010 в 20:50)
 

root, большое спасибо за указание направления ;) Удачи Вам!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования