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

Форум MySQL

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

 

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

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

тема: мои новости: корректный вывод комментариев пользователей
 
 автор: kapitalist   (27.01.2012 в 12:36)   письмо автору
 
 

Все привет. Я хочу сделать у себя на сайте раздел мои новости.
Т.е. из БД выбираются строки для конкретного юзера, и выводятся в цикле. Вроде все просто но почему-то не получается реализовать.

Делаю запрос к БД (возможно загвоздка здесь)
$my_news = mysql_query("SELECT * FROM my_news WHERE login='$_SESSION[login]' or login='' ORDER BY id DESC LIMIT $start, $num",$db);

И вот здесь мне нужно написать, чтобы выбирались строки где login='', т.е. где логин пустой, может быть нужно написать не or, а что то другое.

Дальше вывожу в цикле
while ($myrow = mysql_fetch_array($my_news))

if (isset ($photo)) {
echo "<p>Оставил комментарий к твоей фотографии</p>";}
if ($myrow['author']=='') {
echo "<p>Новость от разработчиков</p>";}
}


Но таким образом выводится не так как хотелось бы! Выводится 4 новости от разработчиков (хотя в БД их 1), и 4 новости о комменте к фотке (в БД их 4).

Кому не трудно, подскажите нубу! Плиз!:)

Кстати предлагали сделать login = NULL, но так почему то по 3 новости каждого типа отображается :(

  Ответить  
 
 автор: cheops   (27.01.2012 в 13:23)   письмо автору
 
   для: kapitalist   (27.01.2012 в 12:36)
 

А нельзя приложить дамп таблицы my_news, чтобы можно было воспроизвести ситуацию?

  Ответить  
 
 автор: kapitalist   (27.01.2012 в 13:51)   письмо автору
 
   для: cheops   (27.01.2012 в 13:23)
 

Не вопрос:
--
-- Table structure for table `my_news`
--

CREATE TABLE IF NOT EXISTS `my_news` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `login` varchar(255) NOT NULL,
  `id_author` int(11) NOT NULL,
  `id_photo` int(11) NOT NULL,
  `status` int(11) NOT NULL,
  `date` varchar(40) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=12 ;

--
-- Dumping data for table `my_news`
--

INSERT INTO `my_news` (`id`, `login`, `id_author`, `id_photo`, `status`, `date`) VALUES
(1, 'kapitalist', 2, 219, 1, ''),
(2, 'kapitalist', 1, 219, 1, '21.12.2011'),
(3, 'Pcholka', 1, 208, 0, '21.12.2011'),
(4, 'Pcholka', 1, 208, 0, '21.12.2011'),
(5, 'vovka', 1, 196, 0, '21.12.2011'),
(6, 'kapitalist', 1, 224, 1, '21.12.2011'),
(7, 'kapitalist', 1, 222, 1, '21.12.2011'),
(10, '', 0, 0, 0, '27.01.2012'),
(11, '', 0, 0, 0, '');

  Ответить  
 
 автор: cheops   (27.01.2012 в 14:03)   письмо автору
 
   для: kapitalist   (27.01.2012 в 13:51)
 

Ну помоему все работает как надо: выводятся записи, для которых поле login пусто и записи, которые соответствуют выбранному логину. Может на примере разберем ситуацию? Давайте возьмем какого-то пользователя, что для него должно выводиться?

  Ответить  
 
 автор: kapitalist   (27.01.2012 в 14:36)   письмо автору
 
   для: cheops   (27.01.2012 в 14:03)
 

Давайте. Например, у меня пользователь с id = 1
Мне выводится
Оставил комментарий к твоей фотографии

Новость от разработчиков

Оставил комментарий к твоей фотографии

Новость от разработчиков

Оставил комментарий к твоей фотографии

Новость от разработчиков


Хотя должно выводится 4 раза "Оставил комментарий к твоей фотографии", и 1 раз "Новость от разработчиков"

  Ответить  
 
 автор: cheops   (27.01.2012 в 17:28)   письмо автору
 
   для: kapitalist   (27.01.2012 в 14:36)
 

>Давайте. Например, у меня пользователь с id = 1
Правильно ли я понимаю, что это означает id_author = 1? Может одно из условий так и задать, а не ориентироваться на логин? Или поле id_author в таблице my_news означает что-то другое?

  Ответить  
 
 автор: kapitalist   (28.01.2012 в 14:23)   письмо автору
 
   для: cheops   (27.01.2012 в 17:28)
 

login (в бд) - это пользователь, который должен увидеть новость. если логин (в бд) пустой, значит видят все пользователи.

id_author - это автор новости, т.е. можно сказать это он ее создал. Если id_author = 0, значит скрипт должен вывести, что автор этой новости, разработчики сайта.

  Ответить  
 
 автор: cheops   (28.01.2012 в 14:41)   письмо автору
 
   для: kapitalist   (28.01.2012 в 14:23)
 

Тогда нужно на этапе подготовки запроса сделать так, что если id_author - пустой, это в условие не попадает, если он отличен от нуля, добавить условие id_author = значение, аналогично следует поступить с login.

  Ответить  
 
 автор: kapitalist   (28.01.2012 в 21:12)   письмо автору
 
   для: cheops   (28.01.2012 в 14:41)
 

так мне нужно вывести в 1 цикле, новости, где есть логин и где его нет. А автор особого значения не имеет. За счет автора, я буду менять вид отображения!

  Ответить  
 
 автор: kapitalist   (30.01.2012 в 00:36)   письмо автору
 
   для: cheops   (27.01.2012 в 14:03)
 

Короче, весело получилось. Написал код заново.
$my_news = mysql_query("SELECT * FROM my_news WHERE login='' or login='$_SESSION[login]'",$db); 
$kol = mysql_num_rows($my_news);
echo "Всего $kol новостей<br>";
// Выводим новости в цикле 
while ($myrow = mysql_fetch_array($my_news))

if ($myrow['login']=='') {
echo "Новость разработчиков :)<br>";
}
if ($myrow['id_photo']>'0') {
echo "Коммент к фото<br>";
}
}


Выводится как надо. Спасибо.

Но есть еще один вопрос. У меня будет в БД поле, где будут храниться id -пользователей, которые должны увидеть конкретную новость.
Например новость у которой id = 53 должны увидеть несколько пользователей с id = 4, id = 5 и т.д.
Думаю хранить это в таком виде (4~5~6). Но возник вопрос.
Допустим $_SESSION[id]=4, как мне понять показывать ему новость или нет? Я просто ни логику запроса понять не могу, ни как это сделать! Подскажите плиз :)

  Ответить  
 
 автор: kapitalist   (27.01.2012 в 13:53)   письмо автору
 
   для: cheops   (27.01.2012 в 13:23)
 

Но тогда еще нужно вот это в коде дописать
$myrow = mysql_fetch_array($my_news);
$author = $myrow['id_author'];
$photo = $myrow['id_photo'];

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

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