За последние 24 часа нас посетили 19547 программистов и 1602 робота. Сейчас ищут 904 программиста ...

Сильно ли нагрузит систему?

Тема в разделе "PHP для новичков", создана пользователем sham, 29 ноя 2014.

  1. sham

    sham Активный пользователь

    С нами с:
    19 мар 2014
    Сообщения:
    54
    Симпатии:
    0
    Добрый день форумчане!)
    Встала задача: вывод новостей из базы данных.
    Был написан код
    Код (Text):
    1.  
    2. <?php
    3. include('temp/shapka.php');
    4. include('config.php');
    5. ?>
    6. <u>Ваши новости</u><br><br>
    7.  
    8. <?php
    9.  
    10. $resultat_news = mysql_query("SELECT id FROM news");
    11. $array_news = mysql_fetch_array($resultat_news);
    12.  
    13. $result = count($array_news);// Узнаем кол-во новстей
    14.  
    15.  
    16. echo '<b>Всего Новостей - </b>',$result,'<br>';
    17.  
    18. for ($i=1; $i<=$result;$i++) {
    19.  
    20.     $resulta = mysql_query("SELECT * FROM news WHERE id='$i'");
    21.  
    22.     $arra = mysql_fetch_array($resulta);
    23.  
    24.     echo "Новость #",$i,' <br>Заголовок - ',$arra['title'],'<br>';
    25.     echo "Дата добовления - ",$arra['date_news'],'';
    26.     echo ' <br>Текст новости - ',$arra['text_news'],'<br>----------<br>';
    27. }
    28.  
    29. ?>
    Код вроде работает, но встает вопрос - если обращаться к базе в каждом цикле это не нагрузит систему? Так как слышал что через-мерные запросы не желательны.
    Буду благодарен, если поясните )
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    систему может сильно и не нагрузит но для решения таких задач придуманы штатные инструменты языка структурированных запросов. join называется. удивительно как новички берутся за "проекты" не имея вообще никакого базиса.

    Добавлено спустя 2 минуты 25 секунд:
    еще более удивительно наблюдать незнание базиса от человека который только на этом форуме с марта месяца 2014. то есть за 8 месяцев знаний ноль и саморазвития ноль.
     
  3. sham

    sham Активный пользователь

    С нами с:
    19 мар 2014
    Сообщения:
    54
    Симпатии:
    0
    Это не серьезный проект и не коммерческий. Просто в качестве изучения языка решил написать систему управления.

    Добавлено спустя 1 минуту 5 секунд:
    Кроме изучения есть еще учеба и работа), Уделяется столько времени, сколько возможно.
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    $resultat_news = mysql_query("SELECT id FROM news"); - выбрать колонку ид у всех строк в таблице новостей
    $array_news = mysql_fetch_array($resultat_news); - получить первый кортеж при успешном запросе, false если строк ноль или провал запроса

    $result = count($array_news);// Узнаем кол-во новстей - посчитать кол-во полей в первом кортеже. блин АДЫН. у тэба там тока ыд. адын. всэгда адын.

    Добавлено спустя 3 минуты 4 секунды:
    базис скуэля один вечер займет. будешь знать реляционную модель по крайней мере. так что работа-учеба это просто отмаза. книжки можно и в метро почитать, и на толчке сидя.

    Добавлено спустя 2 минуты 19 секунд:
    блин, только сейчас заметил... а зачем там вообще херова туча запросов? ты ж с одной таблицы читаешь!!! ну точно клиника...
     
  5. sham

    sham Активный пользователь

    С нами с:
    19 мар 2014
    Сообщения:
    54
    Симпатии:
    0
    Волна критики, вот пройдет пару лет потом осудишь )
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    чо-то я сегодня добрый...
    Код (PHP):
    1. $resultat_news = mysql_query("SELECT * FROM news"); // выбор всех кортежей и всех столбцов из таблицы новостей
    2. while($stroka_novosti = mysql_fetch_assocc($resultat_news)){ // итерация результата
    3.  var_dump($stroka_novosti); // просто отладочный дамп строки новости. уж сам додумайся что с ним делать.
    4. }
    Добавлено спустя 1 минуту 48 секунд:
    да, критика. потому что если за 8 месяцев ты осилил... говнокодерство... то лучше тебе этим не заниматься. хотя даже на говнокодерство это не похоже... непонимание есть, отмазки от саморазвития придуманы, тебя всё устраивает. я лишь сижу на диване и размышляю вслух о том какие нынче люди ленивые пошли.

    Добавлено спустя 4 минуты 22 секунды:
    поставил напоминание на 01 декабря 2016. не пропадай из виду))
     
  7. sham

    sham Активный пользователь

    С нами с:
    19 мар 2014
    Сообщения:
    54
    Симпатии:
    0
    Окей, обез отпишусь
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    обЯз, обязательно же, не?))))

    код-то помог?)))
     
  9. sham

    sham Активный пользователь

    С нами с:
    19 мар 2014
    Сообщения:
    54
    Симпатии:
    0
    Ахх да косяк. Да код помог, спасибо.
     
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    да незашт. обращайся. но базис рекомендую освоить в любом случае. проще будет программы писать. не важно на заказ или просто для души.
     
  11. sham

    sham Активный пользователь

    С нами с:
    19 мар 2014
    Сообщения:
    54
    Симпатии:
    0
    Для души) , спасибо за совет.
    P.S В будущем возможно на заказ;-)

    Добавлено спустя 24 минуты 48 секунд:
    Ради Эксперимента
    Код (Text):
    1. <?php
    2.  
    3. $resultat_news = mysql_query("SELECT * FROM news");
    4. $array_news = mysql_fetch_array($resultat_news);
    5.  
    6. //$result = count($array_news);// Узнаем кол-во новстей
    7.  
    8.  
    9. //echo '<b>Всего Новостей - </b>',$result,'<br>';
    10.  
    11. $id_news=$array_news['id'];
    12.  
    13. for ($i=1; $i<=$id_news;$i++) {
    14.  
    15.     $resulta = mysql_query("SELECT * FROM news WHERE id='$i'");
    16.     $arra = mysql_fetch_array($resulta);
    17. $id_news=$arra['id']+1;
    18. if ($arra['id']==NULL) {
    19. $i=1000;
    20. break;
    21. }
    22.     echo "Новость #",$i,' <br>Заголовок - ',$arra['title'],'<br>';
    23.     echo "Дата добовления - ",$arra['date_news'],'';
    24.     echo ' <br>Текст новости - ',$arra['text_news'],'<br>----------<br>';
    25. }
    26.  
    27. ?>
    Хаа как такой вариант?
     
  12. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    нах такой вариант... ты выбрал все строки новостей, получил одну внутрь программы, получил ее идентификатор. а потом у тебя какой-то цикл. чтоааа? ты себе сам объяснить что-нибудь можешь?
    поглянь на то что я тебе дал - получили все строки, итерируем результат работая с каждой новостью. видишь как тебе базиса не хватает? тебе дали рабочий код а ты не можешь просто взглянув на него понять что он делает. и не можешь встроить его в свою программу...

    на вот еще раз подумай
    Код (PHP):
    1. <?php
    2. $resultat_news = mysql_query("SELECT * FROM `news`");
    3. $array_news = mysql_fetch_array($resultat_news);
    4. $i = 0;
    5.  
    6. while ($arra = mysql_fetch_assocc($resultat_news)) {
    7.     echo 'Новость #', ++$i, ' <br>Заголовок - ', $arra['title'], '<br>';
    8.     echo 'Дата добАвления - ', $arra['date_news'], '';
    9.     echo ' <br>Текст новости - ', $arra['text_news'], '<br>----------<br>';
    10. }
     
  13. irobot

    irobot Новичок

    С нами с:
    15 ноя 2014
    Сообщения:
    88
    Симпатии:
    0
    И ещё, sham, лучше не пользуйтесь функциями с приставкой mysql_ их скоро искрлючат из php. Они устарели. Пользуйтесь PDO или mysqli
     
  14. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Где то я читал что выполнять запрос в цикле это очень плохо и нельзя.
    Второе, твой код будет по максимуму нагружать систему, по максимуму это имеется ввиду не то что 100% ЦП и ОП, а то что у тебя почти самый расходный вариант.

    Я вот тут второй день сижу делаю программу на C# которая работает с MySQL, так вот если по одной записи доставать из БД и запихивать по 1 записи, это сильно грузит базу, я переделал программу, что бы за раз получать много и за раз добавлять много, производительность возросла многократно.

    по этому уменьшай количество запросов в БД, делай как пишет выше Ganzal, ну или около того.
     
  15. sham

    sham Активный пользователь

    С нами с:
    19 мар 2014
    Сообщения:
    54
    Симпатии:
    0
    Код (Text):
    1.  
    2. $resultat_news = mysql_query("SELECT * FROM news"); // выбор всех кортежей и всех столбцов из таблицы новостей
    3. while($stroka_novosti = mysql_fetch_array($resultat_news)){ // итерация результата
    4.  
    5. //var_dump($stroka_novosti);
    6.  
    7. }
    Момент в var_dump($stroka_novosti) не понятен немного. Как можно вывести это? Гугл говорит что стоит смотреть в сторону foreach . Можете растолковать
     
  16. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а почему вдруг вы пытаетесь понять первый пример когда я вам дал рабочий код вторым примером? вардамп не пытайтесь понять. там массив соответствующий кортежу текущей итерации результата запроса к субд.
     
  17. sham

    sham Активный пользователь

    С нами с:
    19 мар 2014
    Сообщения:
    54
    Симпатии:
    0
    Код (Text):
    1. $resultat_news = mysql_query("SELECT * FROM `news`");
    2. $array_news = mysql_fetch_array($resultat_news);
    3. $i = 0;
    4.  
    5. while ($arra = mysql_fetch_assocc($resultat_news)) {
    6.     echo 'Новость #', ++$i, ' <br>Заголовок - ', $arra['title'], '<br>';
    7.     echo 'Дата добАвления - ', $arra['date_news'], '';
    8.     echo ' <br>Текст новости - ', $arra['text_news'], '<br>----------<br>';
    9. }
    Если про этот код, то он ничего не выводит

    Добавлено спустя 1 минуту 16 секунд:
    Но если поменять while ($arra = mysql_fetch_assocc($resultat_news)) { на mysql_fetch_array - все отличное работает

    Добавлено спустя 2 минуты 10 секунд:
    Встает след проблема, если удалить запись из БД, например с ид-1. То при работе данного кода выводит новости все - кроме 2. Т.е все новости начиная с ид 3,4,5,6 .... и тд
     
  18. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ахахахаха.... mysql_fetch_assocc, жгу да. я опечатался тупо а ты ни отладку не умеешь делать ни поискать ЭТУ строку в гугле не осилил... дальше даже вникать не буду что у тебя там первая вторая пятая новость... за год уж обязан был научиться дебажить и тупо понимать чо хочешь и сравнивать с тем что видишь. а знаешь как я знаю что ты отладку не делаешь? ну тебе же ничего не выводит. а пхп по идее плюется ошибкой. стало быть ты считаешь себя таким крутым что вывод ошибок ты погасил. ну значит это было осознанное дело. значит ты знаешь где искать журнал в который пхп-машина складирует свои недовольства. или его ты тоже выключил?
     
  19. sham

    sham Активный пользователь

    С нами с:
    19 мар 2014
    Сообщения:
    54
    Симпатии:
    0
    Я не отключал точно)
     
  20. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ну так надо было включить! это очевидно же! ты только учишься писать код! нужно врубить е_ол и наслаждаться тем как с тобой общается пхп-машина. хороший код не бросается даже нотисами. ну а на продакшене это по дефолту выключается чтоб неслучайный посетитель не читал лишнего. но тебе еще далеко до продакшн кода. очень далеко с таким прогрессом за неполный год...
     
  21. sham

    sham Активный пользователь

    С нами с:
    19 мар 2014
    Сообщения:
    54
    Симпатии:
    0
    27-Nov-2014 23:56:26 Europe/Paris] PHP Fatal error: Call to undefined function mysql_fetch_assocc() in C:\wamp\www\q\table_news.php on line 30
    в ЖУРНАЛЕ НАШЕЛ
    Видимо на мне теперь клеймо(Зарегистрировался 8 мес назад). Я же говорю стало интересно, зарегистрировался.Потом был перерыв, сейчас опять появ интерес.)
     
  22. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ну нашел ты в журнале. и дальше что?
    клеймо не клеймо а хотя бы за полтора дня что вот эта конкретная тема существует уже можно было осилить отладку и настройку сервера разработки.
     
  23. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    А ты опасный человек, надо быть поосторожнее..

    sham, чувак ты пользующийся устаревшими функциями (классом) для работы с БД - mysql, ей на замену пришел другой класс - mysqli, i на конце значит что то типа усовершенствованный, найди как пользоваться этик классом (по большому счету так же как и mysql) и пользуйся.
     
  24. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    VLK, там хрен с ним с расширением, я дабл-си хернул в майэскуэль-фетч-асоц. и ошибка ведь кажет что нет такой функции. но у человека режим паранойи поэтому была пустая страница.

    sham, на режим паранойи не обижайся ибо это вполне себе термин из мира безопасности например
     
  25. sham

    sham Активный пользователь

    С нами с:
    19 мар 2014
    Сообщения:
    54
    Симпатии:
    0
    Так почему первый элемент не выводится?
    Код (Text):
    1. $resultat_news = mysql_query("SELECT * FROM news");
    2. $array_news = mysql_fetch_array($resultat_news);
    3. $i = 0;
    4.  
    5. while ($arra = mysql_fetch_array($resultat_news)) {
    6.  
    7.     echo 'Новость #', $arra['id'], ' <br>Заголовок - ', $arra['title'], '<br>';
    8.     echo 'Дата добАвления - ', $arra['date_news'], '';
    9.     echo ' <br>Текст новости - ', $arra['text_news'], '<br>----------<br>';
    10. }
    VLK, я обязательно прочитаю про mysqli