ФорумПрограммированиеPHP для идиотов → Как сделать правильную выборку ?

Как сделать правильную выборку ?

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 1 декабря 2008 г. 21:34, спустя 4 минуты 9 секунд

    adw0rd, имеется ввиду метод "гадать на чайной гуще" … как еще то)


    например вот такой запрос

    SELECT categories.* FROM notes, categories WHERE notes.catid=categories.id ORDER BY notes.id DESC


    почти уверен что этот запрос в правильном направлении))))

    а по теме код какой то вооообще невнятный)
    Сапожник без сапог
  • Ken_tus

    Сообщения: 11 Репутация: N Группа: Кто попало

    Spritz 3 декабря 2008 г. 0:25, спустя 1 день 2 часа 51 минуту

    Запрос:

    SELECT categories.name, notes.added, notes.title, notes.content, notes.importance, notes.id FROM notes, categories WHERE notes.catid=categories.id ORDER BY notes.id DESC

    Непосредственно в mysql работает правильно а вот когда я начинаю его запихивать на страницу используя php выдает всякую ересь.

    А по поводу кода я даже спорить не стану, так как только только начал изучать это всё ))
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 декабря 2008 г. 0:27, спустя 1 минуту 11 секунд

    скажу честно ошибки у вас тут

    mysql_select_db($database_site, $site);
    $query_notes = "SELECT categories.name, notes.added, notes.title, notes.content, notes.importance, notes.id FROM notes, categories WHERE notes.catid=categories.id ORDER BY notes.id DESC";
    $query_limit_notes = sprintf("%s LIMIT %d, %d", $query_notes, $startRow_notes, $maxRows_notes);
    $notes = mysql_query($query_limit_notes, $site) or die(mysql_error());
    $row_notes = mysql_fetch_assoc($notes);

    вы получаете только первую строку, а вам я думаю нужны все :)
    Сапожник без сапог
  • Ken_tus

    Сообщения: 11 Репутация: N Группа: Кто попало

    Spritz 3 декабря 2008 г. 0:37, спустя 10 минут 26 секунд

    А можно для не очень далёких как получить все строки ? :-)
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 3 декабря 2008 г. 0:41, спустя 4 минуты

    Посмотреть в мануале опиcание той функции, которой пользуешся:

    while ($row_notes = mysql_fetch_assoc($notes))
    {

    }
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 декабря 2008 г. 1:12, спустя 30 минут 45 секунд


    Посмотреть в мануале опиcание той функции, которой пользуешся:

    while ($row_notes = mysql_fetch_assoc($notes))
    {

    }

    я дал форы)
    Сапожник без сапог
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 3 декабря 2008 г. 11:40, спустя 10 часов 28 минут 22 секунды

    phpdude, ты на самом деле, сделал самое главное - вычленил критичные строки. А я обычно, если приведено больше 10 строк кода вообще его не смотрю. Самая главная беда начинающих - это именно не умение локализовать ошибки. Именно локализовать, а не исправлять. Вторая беда - не умение нормально задать вопрос. Если бы не это, любая проблема разрешалась бы в первом же ответе.

    Вот в данном примере (Ken_tus ЭТО ДЛЯ ТЕБЯ И ДРУГИХ НОВИЧКОВ). У тебе SQL запрос на прямую выдает правильные данные, а из PHP неправильные. Дык нафига городить нам весь огород? Выкинь все лишнее из кода (всю подготовку запроса, всю обработку результатов итд итп) и напиши скрипт, который обрабатывает и печатает в самом примитивнов виде только это единственный запрос. Это 3-4 строчки. Пока будешь делать это либо сам разберешься, либо тебе моментально подскажут, что ты неправильно пользуешся функцией.

    Блин, надо какой-то FAQ на эту тему. Только как блин объяснить … обижаться ведь будут.


  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 декабря 2008 г. 12:45, спустя 1 час 5 минут 7 секунд


    phpdude, ты на самом деле, сделал самое главное - вычленил критичные строки. А я обычно, если приведено больше 10 строк кода вообще его не смотрю. Самая главная беда начинающих - это именно не умение локализовать ошибки. Именно локализовать, а не исправлять. Вторая беда - не умение нормально задать вопрос. Если бы не это, любая проблема разрешалась бы в первом же ответе.

    Вот в данном примере (Ken_tus ЭТО ДЛЯ ТЕБЯ И ДРУГИХ НОВИЧКОВ). У тебе SQL запрос на прямую выдает правильные данные, а из PHP неправильные. Дык нафига городить нам весь огород? Выкинь все лишнее из кода (всю подготовку запроса, всю обработку результатов итд итп) и напиши скрипт, который обрабатывает и печатает в самом примитивнов виде только это единственный запрос. Это 3-4 строчки. Пока будешь делать это либо сам разберешься, либо тебе моментально подскажут, что ты неправильно пользуешся функцией.

    Блин, надо какой-то FAQ на эту тему. Только как блин объяснить … обижаться ведь будут.



    да никак не объяснишь, они просто не понимают что и где, собирают эти исходники по кускам интернета, в этом то и проблема)
    Сапожник без сапог
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 3 декабря 2008 г. 13:00, спустя 14 минут 38 секунд


    собирают эти исходники по кускам интернета, в этом то и проблема)
    Ага, это третья беда. Почему-то думают, что прикрутить кусок кода взятый из интернета это проще, чем написать самому. Хотя именно адаптация чужого кода это то, что даже профи делают часто с большим трудом, не всегда успешно и не без помощи "какой-то матери". )))))))))))
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 декабря 2008 г. 13:09, спустя 8 минут 41 секунду



    собирают эти исходники по кускам интернета, в этом то и проблема)
    Ага, это третья беда. Почему-то думают, что прикрутить кусок кода взятый из интернета это проще, чем написать самому. Хотя именно адаптация чужого кода это то, что даже профи делают часто с большим трудом, не всегда успешно и не без помощи "какой-то матери". )))))))))))
    насчет матери какой то вынужден согласиться :)

    ебона мать обычно я произношу) ну или пиздец, блдь нахуй, чо за хуйня, пидоры ебаные, пидоры …

    http://phpdude.ru/

    справа облако тегов полностью описывает ситуацию :))))
    Сапожник без сапог
  • Ken_tus

    Сообщения: 11 Репутация: N Группа: Кто попало

    Spritz 3 декабря 2008 г. 23:18, спустя 10 часов 9 минут 24 секунды

    <?php do { ?>
    <br>
    <div class="<?php echo (($row_notes['importance'] == 1) ? "impfullnote" : "fullnote"); ?>">
    <h2><a href="comments.php?note=<?php echo $row_notes['id']; ?>&pageNum_notes=<?php echo $pageNum_notes; ?>&totalRows_notes=<?php echo $totalRows_notes ?>"><?php echo $row_notes['title']; ?></a><?php if ($row_notes['added'] == date("Y-m-d")) { ?><img src="exclamation.gif"><?php } ?></h2>
    <p class="pubdate"><?php echo date("d.m.y", strtotime($row_notes['added'])); ?></p>
    <p><?php do { if ($row_categories['id']==$row_notes['catid']) {
    echo $row_categories['name']; }}
    while ($row_categories = mysql_fetch_assoc($categories)); ?></p>
    <p><?php echo $row_notes['content']; ?></p>
    </div>
    <p>&nbsp;</p>

    <?php } while ($row_notes = mysql_fetch_assoc($notes)); ?>


    Подскажите почему внутренний цикл работает только при первом прохождении внешнего.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 декабря 2008 г. 23:24, спустя 6 минут 17 секунд

    потому что ты do while используешь, юзай просто while(expression) {}

    do {выполнится всегда} while(expression) - выполняется первый раз всегда, если условие не выполняется в вайле, больше не выполняется
    Сапожник без сапог
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 3 декабря 2008 г. 23:27, спустя 2 минуты 53 секунды

    Потому что внутренний mysql_fetch_assoc уже все извлек что было в результате SQL запроса при первом прохождении и больше ему извлекать нечего.

    Кстати, почему do … while, а не просто while?
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 3 декабря 2008 г. 23:29, спустя 1 минуту 50 секунд


    Потому что mysql_fetch_assoc уже все извлек что было в результате SQL запроса при первом прохождении и больше ему извлекать нечего.

    Кстати, почему do … while, а не просто while?
    чуток неправильно)

    mysql_fetch_assoc еще ничего не извлек! а использовать хочется, поэтмоу явно видно пустой див(без информации) и нет в списке последнего результата :)

    я неправ? тс.
    Сапожник без сапог
  • Ken_tus

    Сообщения: 11 Репутация: N Группа: Кто попало

    Spritz 3 декабря 2008 г. 23:33, спустя 4 минуты 32 секунды


    Потому что внутренний mysql_fetch_assoc уже все извлек что было в результате SQL запроса при первом прохождении и больше ему извлекать нечего.

    Кстати, почему do … while, а не просто while?


    спустя 10 мин размышлений я пришёл к тому же выводу )

    в конце концов сделал вот так

    <?php do { ?>
    <br>
    <div class="<?php echo (($row_notes['importance'] == 1) ? "impfullnote" : "fullnote"); ?>">
    <h2><a href="comments.php?note=<?php echo $row_notes['id']; ?>&pageNum_notes=<?php echo $pageNum_notes; ?>&totalRows_notes=<?php echo $totalRows_notes ?>"><?php echo $row_notes['title']; ?></a><?php if ($row_notes['added'] == date("Y-m-d")) { ?><img src="exclamation.gif"><?php } ?></h2>
    <p class="pubdate"><?php echo date("d.m.y", strtotime($row_notes['added'])); ?></p>
    <p><?php do { if ($row_categories['id']==$row_notes['catid']) {
    echo $row_categories['name']; }}
    while ($row_categories = mysql_fetch_assoc($categories)); ?></p>
    <?php mysql_select_db($database_site, $site);
    $query_categories = "SELECT * FROM categories ORDER BY name ASC";
    $categories = mysql_query($query_categories, $site) or die(mysql_error());
    $row_categories = mysql_fetch_assoc($categories);
    $totalRows_categories = mysql_num_rows($categories); ?>
    <p><?php echo $row_notes['content']; ?></p>
    </div>
    <p>&nbsp;</p>

    <?php } while ($row_notes = mysql_fetch_assoc($notes)); ?>


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

    И спасибо за участие без вас ещё неделю вис бы )

Пожалуйста, авторизуйтесь, чтобы написать комментарий!