|
|
|
| Все привет. Я хочу сделать у себя на сайте раздел мои новости.
Т.е. из БД выбираются строки для конкретного юзера, и выводятся в цикле. Вроде все просто но почему-то не получается реализовать.
Делаю запрос к БД (возможно загвоздка здесь)
$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 новости каждого типа отображается :( | |
|
|
|
|
|
|
|
для: kapitalist
(27.01.2012 в 12:36)
| | А нельзя приложить дамп таблицы my_news, чтобы можно было воспроизвести ситуацию? | |
|
|
|
|
|
|
|
для: 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, '');
|
| |
|
|
|
|
|
|
|
для: kapitalist
(27.01.2012 в 13:51)
| | Ну помоему все работает как надо: выводятся записи, для которых поле login пусто и записи, которые соответствуют выбранному логину. Может на примере разберем ситуацию? Давайте возьмем какого-то пользователя, что для него должно выводиться? | |
|
|
|
|
|
|
|
для: cheops
(27.01.2012 в 14:03)
| | Давайте. Например, у меня пользователь с id = 1
Мне выводится
Оставил комментарий к твоей фотографии
Новость от разработчиков
Оставил комментарий к твоей фотографии
Новость от разработчиков
Оставил комментарий к твоей фотографии
Новость от разработчиков
Хотя должно выводится 4 раза "Оставил комментарий к твоей фотографии", и 1 раз "Новость от разработчиков" | |
|
|
|
|
|
|
|
для: kapitalist
(27.01.2012 в 14:36)
| | >Давайте. Например, у меня пользователь с id = 1
Правильно ли я понимаю, что это означает id_author = 1? Может одно из условий так и задать, а не ориентироваться на логин? Или поле id_author в таблице my_news означает что-то другое? | |
|
|
|
|
|
|
|
для: cheops
(27.01.2012 в 17:28)
| | login (в бд) - это пользователь, который должен увидеть новость. если логин (в бд) пустой, значит видят все пользователи.
id_author - это автор новости, т.е. можно сказать это он ее создал. Если id_author = 0, значит скрипт должен вывести, что автор этой новости, разработчики сайта. | |
|
|
|
|
|
|
|
для: kapitalist
(28.01.2012 в 14:23)
| | Тогда нужно на этапе подготовки запроса сделать так, что если id_author - пустой, это в условие не попадает, если он отличен от нуля, добавить условие id_author = значение, аналогично следует поступить с login. | |
|
|
|
|
|
|
|
для: cheops
(28.01.2012 в 14:41)
| | так мне нужно вывести в 1 цикле, новости, где есть логин и где его нет. А автор особого значения не имеет. За счет автора, я буду менять вид отображения! | |
|
|
|
|
|
|
|
для: 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, как мне понять показывать ему новость или нет? Я просто ни логику запроса понять не могу, ни как это сделать! Подскажите плиз :) | |
|
|
|
|
|
|
|
для: cheops
(27.01.2012 в 13:23)
| | Но тогда еще нужно вот это в коде дописать
$myrow = mysql_fetch_array($my_news);
$author = $myrow['id_author'];
$photo = $myrow['id_photo'];
|
| |
|
|
|
|