Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Запрос в запросе
Stave  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Пользователь
Сообщений: 138
Пользователь №: 40254
На форуме: 2 года, 3 месяца, 1 день
Карма: 4




Вечер добрый, столкнулся с проблемой. Я максимально начинающий пользователь, рассчитываю на понимание.

Написал скрипт на вывод новостей, добавление к ним комментариев с последующей модерацией, + учет комментариев к каждой новости отдельно.

Но знания MySQL еще меньше чем PHP=)
По-этому столкнулся с проблемой вывода кол-ва комментариев в ЛЕНТЕ новостей.

Таким типом ВНУТРИ открытой новости считаю сколько к ней комментариев присвоено и промодерировано.
 
$comm = mysql_query("SELECT COUNT(*) FROM `commects` WHERE `comm_id` = ".$id." AND moderation = 1");
$row2 = mysql_fetch_row($comm);
$total = $row2[0];



а как сделать запрос в запросе на странице вывода всех новостей чтобы выводился подсчет с БД не знаю, смотрел в инете примеры, но как-то сложно, не подскажите?


$sql = mysql_query("SELECT *, DATE_FORMAT(datepost, '%d.%m.%Y, %H:%i:%s') AS datepost FROM `news` ORDER BY `id` DESC", $link_connect) or die(mysql_error() );


Распилил все дело на 2 таблицы, новости новостями, комменты в отдельной, в дальнейшем идет передача ID новости в таблицу комментариев и дальнейший вывод по этому ID к необходимой новости, если инфы мало, скину код

Присоединённое изображение
Присоединённое изображение


--------------------
Если долго в одних стенах живешь, ты с ними сростаешься
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Stave  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Пользователь
Сообщений: 138
Пользователь №: 40254
На форуме: 2 года, 3 месяца, 1 день
Карма: 4




Второй скрин

Присоединённое изображение
Присоединённое изображение


--------------------
Если долго в одних стенах живешь, ты с ними сростаешься
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 2 дня
Карма: 40




Почитай сначала о проектировании БД


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Stave  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Пользователь
Сообщений: 138
Пользователь №: 40254
На форуме: 2 года, 3 месяца, 1 день
Карма: 4




Ясно/понятно, на этом форуме всегда найдется всезнайка который проявит себя чтобы его "поупрашивали".

У меня предложение к администратору форума, при регистрации сделайте проверочное задание на знание языков программирования, маленькая задачка которая проверит знания юзера и даст решение в регистрации. Чтобы тут всякая бездарь как я не собиралась, царей умных не мучила своими вопросами.

Да я понимаю, что слишком много халявщиков здесь сидит, которые просят написать им чуть ли не весь сайт, но если кому-то в принципе "взападло", чем-то по мелочи помогать, то не стоит отвечать вовсе, тем самым ставить себя выше "новичков". Однажды и Вы, уважаемый chee были бревном в программировании, и вы хотели получить какие-то ответы и помощь.

Удалите тему, посижу часы, разберусь может.
Админу добра! Ответов более не требуется


--------------------
Если долго в одних стенах живешь, ты с ними сростаешься
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15561
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 2 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 12 дней


chee
Что тебя смутило в его базе?

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

И не совсем понятно. Что именно считать. Вообще все комментарии или отдельно для каждой новости в списке?


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 2 дня
Карма: 40




twin, ну отсутствие нормализации


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Stave  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Пользователь
Сообщений: 138
Пользователь №: 40254
На форуме: 2 года, 3 месяца, 1 день
Карма: 4




Цитата (twin @ 4.04.2016 - 09:35)

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

И не совсем понятно. Что именно считать. Вообще все комментарии или отдельно для каждой новости в списке?



Отмечу сразу, что я не в общее число перевел свое сообщение, дело не в том, что долго отвечают или еще что-то. Я понимаю, что ответа могу и вовсе не дождаться.

Я написал пост, CHEE ответил мне сначала ссылкой на статью википедии, ну уж потом решил превратить это в текст.

Хочу отметить, что с самого начала я написал, что я в БД разбираюсь еще меньше. Да может быть я и пишу примитивно без шаблонной системы и нелогично, но я только учусь. Каждый с годами оттачивает сокращение и логику своего кода.


Суть моего вопроса такая, выложу все по полкам. Я смог посчитать комментарии отдельно к каждой новости.

Комменты находятся в отдельной таблице.
Скрытый текст
user posted image


По этому коду в таблицу отправляется, ID новости, имя отправителя, дата, текст комментария.

if($_POST["post_comment_button"]){

$_POST["post_user"] = clear_string($_POST["post_user"]);
$_POST["post_user_text"] = clear_string($_POST["post_user_text"]);

$dataquery = "
comm_id='"
.$id."',
comm_user_post='"
.$_POST["post_user"]."',
datepost='"
.date("Y.m.d, H:i:s")."',
comm_post='"
.$_POST["post_user_text"]."',
name_topic='"
.$_POST["name_topic"]."'
"
;
$update = mysql_query("INSERT INTO commects SET $dataquery", $link_connect);


header('Location: new.php?id='.$id.'');
die();
}


clear_string - отдельная функция очистки строки (на всякий случай)



Таким образом посчитал в таблице комментарии по переданному "ID" новости в comm_id, + если я уже промодерировал комментарий в админке moderation = 1 (ЭТО ВНУТРИ НОВОСТИ)

$comm = mysql_query("SELECT COUNT(*) FROM `commects` WHERE `comm_id` = ".$id." AND moderation = 1");
$row2 = mysql_fetch_row($comm);
$total = $row2[0];


Результат вывел в облачко (ОПЯТЬ ЖЕ ВНУТРИ НОВОСТИ)
user posted image

Ну соответственно вывел комментарии по id новости (comm_id)

$sql = mysql_query("SELECT *, DATE_FORMAT(datepost, '%d.%m.%Y, %H:%i:%s') AS datepost FROM `commects` WHERE `comm_id` = ".(int)$id." AND `moderation` = 1 ORDER BY `id` DESC", $link_connect) or die(mysql_error() );
if(mysql_num_rows($sql) > 0){
while ($commects = mysql_fetch_assoc($sql)){
echo '<div id="comments">';
echo '
<div class="comm_post">
<div class="avatar"><img src="http://boumantandtechniek.weebly.com/uploads/8/3/4/7/8347819/291331.jpg" alt="" /></div>
<div class="comm_us_name">'
.$commects['comm_user_post'].'</div>
<div class="comm_date">Написал(а): '
.$commects['datepost'].'</div>
<div class="comm_text">'
.$commects['comm_post'].'</div>
</div>
'
;
echo '</div>';
}
}
else{
echo '<span style="font-style:italic;font-size:16pt;">В этой теме еще не сотавляли коментариев</span>';
}



id новости конечно же получал методом: $id = (int)$_GET["id"];

Но на странице с выведенном списком новостей я не знаю как передать в это облачко кол-во комментариев к данной новости.

Рылся в инете и нашел инфу ЗАПРОС в ЗАПРОСЕ, так же один хороший программист (Kusss) указал на тот же вариант. Но как реализовать это в коде вывода новостей в ленту не могу решить


$sql = mysql_query("SELECT *, DATE_FORMAT(datepost, '%d.%m.%Y, %H:%i:%s') AS datepost FROM `news` ORDER BY `id` DESC", $link_connect) or die(mysql_error() );
while ($news = mysql_fetch_assoc($sql)){
echo '<div class="indent"></div>';
echo '<span class="newTitle"><a href="new.php?id='.$news['id'].'" title="Читать новость "'.$news['title'].'"">'.$news['title'].' #'.$news['id'].'</a></span>';
echo '
<div id="NewPost">
<div class="newInfo">Автор: <span class="select">'
.$news['author'].'</span> опубликовал <span class="select">'.$news['datepost'].'</span>, просмотров: <span class="select">'.$news['view'].'</span>, оценили: <span class="select">'.$news['likes'].'</span></div>
<hr />
<div class="newComments">'
.$news['comments'].' <span class="arrowcom"><span></div>
<div class="read_next"><a href="new.php?id='
.$news['id'].'" title="Читать новость "'.$news['title'].'"">[Читать полностью]</a></div>
<div class="newDesc">'
.$news['description'].'</div>
</div>
'
;
}


--------------------
Если долго в одних стенах живешь, ты с ними сростаешься
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 2 дня
Карма: 40




Опять же говорю, читай про нормализацию, а также почитай про primary key, autoincrement


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15561
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 2 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 12 дней


Запрос в запросе чаще называют "вложенным запросом". Что такое алиас, я вижу ты усвоил.

А делается это прмерно так:
SELECT `news`.*, DATE_FORMAT(`news`.`datepost`, '%d.%m.%Y, %H:%i:%s') AS `datepost`, 
(
SELECT COUNT(*) FROM `commects` WHERE `commects`.`id` = `news`.`comm_id`) AS `cnt`
FROM `news` ORDER BY `news`.`id` DESC
Ну или с алиасами для таблиц.

Число комментариев для каждой новости можно вывести как $news['cnt']


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15561
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 2 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 12 дней


Кстати. Не делай скринов, это некрасиво. В PMA есть вкладка "Экспорт". Разберись с ней и выкладывай дампы. Картинки нельзя скопировать, да и видно на них не всё.


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Stave  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Пользователь
Сообщений: 138
Пользователь №: 40254
На форуме: 2 года, 3 месяца, 1 день
Карма: 4




Цитата (twin @ 4.04.2016 - 13:57)
Запрос в запросе чаще называют "вложенным запросом". Что такое алиас, я вижу ты усвоил.



Ну не особо усвоил их))
Спасибо за помощь, не успел ответить Вовремя. Не проверял Ваш код.

Вопрос решился таким образом:
$sql = "SELECT *, DATE_FORMAT(datepost, '%d.%m.%Y, %H:%i:%s') AS datepost, (SELECT COUNT(id) FROM `commects` WHERE comm_id = n.id AND moderation = 1) AS comment FROM `news` AS n ORDER BY `id` DESC";


За что спасибо Kusss, и Вам twin так же ставлю +

Надеюсь тема еще кому-нибудь поможет



Про изображения буду иметь ввиду!

Это сообщение отредактировал Stave - 4.04.2016 - 16:08


--------------------
Если долго в одних стенах живешь, ты с ними сростаешься
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
inpost  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Помагите Здесь живу!!!
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 22691
Пользователь №: 20039
На форуме: 6 лет, 11 месяцев, 28 дней
Карма: 599




Stave
А ты добавь идентификатор "количество комментариев" непосредственно в таблицу новостей. В итоге всё будет значительно быстрее работать.


--------------------
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса