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

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

  • Ken_tus

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

    Spritz 30 ноября 2008 г. 13:19

    У меня есть вот такой код

    <?php
    if (!function_exists("GetSQLValueString")) {
    function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
    {
     $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

     $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

     switch ($theType) {
       case "text":
         $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
         break;    
       case "long":
       case "int":
         $theValue = ($theValue != "") ? intval($theValue) : "NULL";
         break;
       case "double":
         $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
         break;
       case "date":
         $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
         break;
       case "defined":
         $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
         break;
     }
     return $theValue;
    }
    }

    $currentPage = $_SERVER["PHP_SELF"];

    $maxRows_notes = 10;
    $pageNum_notes = 0;
    if (isset($_GET['pageNum_notes'])) {
     $pageNum_notes = $_GET['pageNum_notes'];
    }
    $startRow_notes = $pageNum_notes * $maxRows_notes;

    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);

    if (isset($_GET['totalRows_notes'])) {
     $totalRows_notes = $_GET['totalRows_notes'];
    } else {
     $all_notes = mysql_query($query_notes);
     $totalRows_notes = mysql_num_rows($all_notes);
    }
    $totalPages_notes = ceil($totalRows_notes/$maxRows_notes)-1;

    mysql_select_db($database_site, $site);
    $query_categories = "SELECT name FROM categories";
    $categories = mysql_query($query_categories, $site) or die(mysql_error());
    $row_categories = mysql_fetch_assoc($categories);
    $totalRows_categories = mysql_num_rows($categories);

    $queryString_notes = "";
    if (!empty($_SERVER['QUERY_STRING'])) {
     $params = explode("&", $_SERVER['QUERY_STRING']);
     $newParams = array();
     foreach ($params as $param) {
       if (stristr($param, "pageNum_notes") == false &&
           stristr($param, "totalRows_notes") == false) {
         array_push($newParams, $param);
       }
     }
     if (count($newParams) != 0) {
       $queryString_notes = "&" . htmlentities(implode("&", $newParams));
     }
    }
    $queryString_notes = sprintf("&totalRows_notes=%d%s", $totalRows_notes, $queryString_notes);
    ?>


    делаю вот такой запрос

    <?php echo $row_categories['name']; ?>


    но выводящиеся данные не соответствуют условию notes.catid=categories.id

    Подскажите в чём ошибка ?
  • AlexB

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

    Spritz 30 ноября 2008 г. 13:23, спустя 3 минуты 59 секунд

    Напечатай SQL запрос, выполни его отдельно и посмотри что он возвращает.
  • phpdude

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

    Spritz 30 ноября 2008 г. 13:24, спустя 1 минуту 4 секунды

    замечание :)

    $queryString_notes = "";
    if (!empty($_SERVER['QUERY_STRING'])) {
     $params = explode("&", $_SERVER['QUERY_STRING']);
     $newParams = array();
     foreach ($params as $param) {
       if (stristr($param, "pageNum_notes") == false &&
           stristr($param, "totalRows_notes") == false) {
         array_push($newParams, $param);
       }
     }
     if (count($newParams) != 0) {
       $queryString_notes = "&" . htmlentities(implode("&", $newParams));
     }
    }


    эту кучу можно заменить 3 функциями parse_str,http_build_query,unset. итого в этой куче кода - 15 строк.

    это замечания насчет мат части.

    по поводу выборки

    вместо этого $query_categories = "SELECT name FROM categories";

    $query_categories = "SELECT name FROM categories,categories  where notes.catid=categories.id";

    юзай. должно полегчать пациенту.
    Сапожник без сапог
  • Ken_tus

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

    Spritz 30 ноября 2008 г. 13:45, спустя 21 минуту 31 секунду

    Вот этот запрос
    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
    отдельно работает корректно.
  • phpdude

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

    Spritz 30 ноября 2008 г. 13:49, спустя 3 минуты 21 секунду

    вместо этого $query_categories = "SELECT name FROM categories";

    $query_categories = "SELECT name FROM categories,categories where notes.catid=categories.id";
    Сапожник без сапог
  • Ken_tus

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

    Spritz 30 ноября 2008 г. 13:54, спустя 5 минут 37 секунд


    вместо этого $query_categories = "SELECT name FROM categories";

    $query_categories = "SELECT name FROM categories,categories where notes.catid=categories.id";


    я это сделал выдает

    Not unique table/alias: 'categories'
  • phpdude

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

    Spritz 30 ноября 2008 г. 14:00, спустя 6 минут

    прости, описался)



    $query_categories = "SELECT name FROM notes,categories where notes.catid=categories.id";
    Сапожник без сапог
  • Ken_tus

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

    Spritz 30 ноября 2008 г. 14:07, спустя 6 минут 14 секунд


    прости, описался)



    $query_categories = "SELECT name FROM notes,categories where notes.catid=categories.id";


    пробовал и так, результат неверен так же как и в том варианте что я писал
  • phpdude

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

    Spritz 30 ноября 2008 г. 14:08, спустя 1 минуту 4 секунды

    ну значит играй с запросом, дело в нем.
    Сапожник без сапог
  • Ken_tus

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

    Spritz 30 ноября 2008 г. 15:16, спустя 1 час 8 минут 25 секунд

    Просто неделю уже голову ломаю, выбилсо из сил и не осталось видимых вариантов решения по этому тут и написал (
  • phpdude

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

    Spritz 1 декабря 2008 г. 3:19, спустя 12 часов 2 минуты 40 секунд

    у тебя ошибка в том, что условия для двух запросов неодинаковые. в первом запросе у тебя есть некоторые условия, а во втором безусловный запрос. вот и вся проблема.
    Сапожник без сапог
  • Ken_tus

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

    Spritz 1 декабря 2008 г. 12:56, спустя 9 часов 37 минут 38 секунд


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


    Ты имеешь в виду вот эти запросы ?

    $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_categories = "SELECT name FROM categories";


    ?

    Я пробовал делать их одинаковыми, всё равно выберается самая первая строка из таблицы не отвечающая запросу.
  • adw0rd

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

    Spritz 1 декабря 2008 г. 13:12, спустя 15 минут 31 секунду

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

    Быть не может! Я уверен на все 100, что результаты всегда отвечают запросам. Если это не тот результат, то это просто не тот запрос тогда ;)
    adw/0
  • phpdude

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

    Spritz 1 декабря 2008 г. 13:16, спустя 4 минуты 26 секунд

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

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

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

    накостыляем и наругаем или "слепим" правильный вариант? :)
    точно не ругать! но как ты можешь слепить?
    adw/0

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