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

Форум MySQL

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

 

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

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

тема: Связь таблиц.
 
 автор: 10100100   (10.11.2005 в 11:53)   письмо автору
 
 

Господа, такой вопрос! у меня есть одна база данных с двумя таблицами :


CREATE TABLE 'cms' (
'id_news' INT NOT NULL AUTO_INCREMENT ,
'name_new' TINYTEXT,
'pred_new' TINYTEXT,
'all_new' TINYTEXT,
'time' DATETIME DEFAULT NULL ,
PRIMARY KEY (id_news)
) TYPE = MYISAM;

CREATE TABLE 'comments' (
'id_comments' INT NOT NULL AUTO_INCREMENT ,
'name' TINYTEXT,
'comment' TINYTEXT DEFAULT NULL,
'time' DATETIME DEFAULT NULL ,
PRIMARY KEY (id_comments)
) TYPE = MYISAM;


в CMS хранятся все статьи, а в COMMENTS соответственно комментарии к статьям.
Так вот каким образом можно их завязать вместе? чтобы к НУЖНОЙ статье выводились лишь ЕЁ КОММЕНТЫ?
как организовать запрос?

   
 
 автор: cheops   (10.11.2005 в 12:52)   письмо автору
 
   для: 10100100   (10.11.2005 в 11:53)
 

Для начала в таблицу comments необходимо добавить внешний ключ id_news, который будет совпадать по значению с cms.id_news. Таким образом, статьи из cms и комментарии из comments будут иметь одинаковое значение id_news. Тогда вывод комментариев сведётся к запросу
SELECT * FROM comments WHERE id_news = $id_news

   
 
 автор: 10100100   (10.11.2005 в 17:31)   письмо автору
 
   для: cheops   (10.11.2005 в 12:52)
 

вроде бы понял - спасибо - буду пробовать!

   
 
 автор: 10100100   (10.11.2005 в 18:08)   письмо автору
 
   для: cheops   (10.11.2005 в 12:52)
 

так немного не понял, это получается при каждой новой добавленной новости id_news добавляется автоматически в таблицу CMS ? это понятно, значит получается что это же самое значение при добавлении новости должно передаваться таблице COMMENTS? а как это реализовать? та ведь не автоинкремент...

   
 
 автор: cheops   (10.11.2005 в 22:36)   письмо автору
 
   для: 10100100   (10.11.2005 в 18:08)
 

Во-первых комментарии добавляются под новостью когда она уже выложена, т.е. в параметрах или где-то рядом должен быть id_news новости. Однако если необходимо добавить комментарий сразу в том же скрипте, что и новость для этого можно узнать только что вставленное значение auto_increment, воспользовавшись, либо функцией mysql_insert_id() в PHP, либо встроенной функцией MySQL - LAST_INSERT_ID(), примеры использования этих функций можно найти в темах по ссылкам
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=4095
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=1424

   
 
 автор: 10100100   (11.11.2005 в 14:13)   письмо автору
 
   для: cheops   (10.11.2005 в 22:36)
 

боюсь что я не правильно представляю себе алгоритм работы такого скрипта не могли бы Вы написать свою версию алгоритма... с начала создания статьи...

   
 
 автор: 10100100   (12.11.2005 в 15:49)   письмо автору
 
   для: 10100100   (10.11.2005 в 11:53)
 

CHEOPS ХЕЛП!!!!!!!

   
 
 автор: cheops   (12.11.2005 в 22:42)   письмо автору
 
   для: 10100100   (12.11.2005 в 15:49)
 

А... вопроса не вижу :))) В чём конкретно сложность?

   
 
 автор: 10100100   (13.11.2005 в 05:55)   письмо автору
 
   для: cheops   (12.11.2005 в 22:42)
 

гыксь :)))) вопрос выше этого поста! :)))))
сложность в понятиях/непонятиях Алгоритма! :((
туплю я чёт.. :(

   
 
 автор: cheops   (13.11.2005 в 13:42)   письмо автору
 
   для: 10100100   (13.11.2005 в 05:55)
 

Когда вы связываете таблицы, например таблицу статей и таблицу комментариев к ним. Следует учитывать отношения между таблицами. К статье может быть много комментариев, но комментарий не может быть дан сразу по нескольким статьям. Поэтому таблица с комментариями должна иметь поле, где будет хранится id статьи, к которой он относится. Если бы было наоборот - таблица статей должна бы была иметь такое поле.

   
 
 автор: 10100100   (13.11.2005 в 16:02)   письмо автору
 
   для: cheops   (13.11.2005 в 13:42)
 

да нет это то я понял - заносить то как, как конкретно, тоже автоматом??

   
 
 автор: cheops   (13.11.2005 в 22:03)   письмо автору
 
   для: 10100100   (13.11.2005 в 16:02)
 

Хм... чего-то не очень понятно...

   
 
 автор: 10100100   (14.11.2005 в 06:43)   письмо автору
 
   для: cheops   (13.11.2005 в 22:03)
 

всё всё. вроде бы сообразил -сёдня буду пробовать...

   
 
 автор: 10100100   (14.11.2005 в 08:45)   письмо автору
 
   для: 10100100   (14.11.2005 в 06:43)
 


<? 
include "config.php";
$pred_new nl2br($pred_new);
$all_new nl2br($all_new);
  
$query "INSERT INTO cms VALUES (NULL,'$name_new','$pred_new','$all_new',NOW())";
  
$query2 "INSERT INTO comments VALUES (NULL,LAST_INSERT_ID(),'$name_new','$pred_new','$all_new',NOW())"
mysql_query($query2);
  if(!
mysql_query($query)) 
  { 

    exit(
"Ошибка - ".mysql_error()); 
  } 
header("location:http://localhost/cms/select_redact.php");
?> 


это код добавления новой статьи, но почему то поле id_news в таблице комментс - остаётся не заполненым....

   
 
 автор: cheops   (14.11.2005 в 14:19)   письмо автору
 
   для: 10100100   (14.11.2005 в 08:45)
 

Это потому, что вы сначала выполняете второй запрос, а затем первый - необходимо переписать скрипт примерно так
<? 
include "config.php"
$pred_new nl2br($pred_new); 
$all_new nl2br($all_new); 
  
$query "INSERT INTO cms VALUES (NULL,'$name_new','$pred_new','$all_new',NOW())"
  if(!
mysql_query($query))  exit("Ошибка - ".mysql_error()); 
  
$query "INSERT INTO comments VALUES (NULL,LAST_INSERT_ID(),'$name_new','$pred_new','$all_new',NOW())"
  if(!
mysql_query($query))  exit("Ошибка - ".mysql_error()); 
header("location:http://localhost/cms/select_redact.php"); 
?>

   
 
 автор: 10100100   (14.11.2005 в 14:38)   письмо автору
 
   для: cheops   (14.11.2005 в 14:19)
 

Понятно - пошёл пробовать...

   
 
 автор: 10100100   (14.11.2005 в 15:30)   письмо автору
 
   для: cheops   (14.11.2005 в 14:19)
 

теперь при добавлении коммента ввожу этот скрипт а он не работает, что то не так опять сделал, id_news вроде бы передаётся с помощью HIDDEN инпута...


<? 
include "config.php";
$comment nl2br($comment);
  
$query "INSERT INTO comments VALUES (NULL,'','$name','$comment',NOW()) WHERE id_news="'.$id_news.'""

  if(!
mysql_query($query)) 
  { 

    exit(
"Ошибка - ".mysql_error()); 
  } 
header("location:http://localhost/cms/index2.php");
?> 

   
 
 автор: cheops   (15.11.2005 в 00:15)   письмо автору
 
   для: 10100100   (14.11.2005 в 15:30)
 

А зачем WHERE id_news = $id_news - вы же новую запись создаёте - она не нужна... Кроме того, для обрамления SQL-запроса используются двойные кавычки, а внутри, вокруг $id_news - одинарные это должно вызывать синтаксическую ошибку, правильно, с синтаксической точки зрения
<?php
$query 
"INSERT INTO comments VALUES (NULL,'','$name','$comment',NOW()) WHERE id_news=".$id_news;
?>

   
 
 автор: 10100100   (15.11.2005 в 08:12)   письмо автору
 
   для: cheops   (15.11.2005 в 00:15)
 

дело в том что у меня почему то при любом раскладе комменты добавляются к порядковому номеру 5 а статей всего 4...... видать тут Апдейт нужен а не инсерт.....

   
 
 автор: cheops   (15.11.2005 в 13:32)   письмо автору
 
   для: 10100100   (15.11.2005 в 08:12)
 

По тому что вы в INSERT не указываете его...

   
 
 автор: 10100100   (15.11.2005 в 15:56)   письмо автору
 
   для: cheops   (15.11.2005 в 13:32)
 

тоесть если я добавлю его в VALUES то всё заработает???

   
 
 автор: cheops   (15.11.2005 в 21:53)   письмо автору
 
   для: 10100100   (15.11.2005 в 15:56)
 

Это зависит от структуры таблицы...

   
 
 автор: 10100100   (18.11.2005 в 13:09)   письмо автору
 
   для: cheops   (15.11.2005 в 21:53)
 

гыксь я кажись понял в чём косяк!

я ж в таблице COMMENTS поставил ещё и ID каждого коммента!! ! и ай ди каждого коммента Автоматом !! сдаётся мне что автоинкремент стоит убрать!? :))

   
Rambler's Top100
вверх

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