Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Базы данных (http://www.flasher.ru/forum/forumdisplay.php?f=22)
-   -   Это опять я !!!! в условие where траблы (http://www.flasher.ru/forum/showthread.php?t=37700)

ama2001 26.09.2002 18:07

Это опять я !!!! в условие where траблы
 
(((ama_tovar.id_type)=$id) AND ((ama_tovar_group.id)=$id_type))

вопрос в том, что странице, может не передоватся $id_type...

то есть строка выглядит так
http://www.aaa.ru/print_tovar_table.php?id=1&id_type=

и в sql запрос воткнется неопределенное значение

(((ama_tovar.id_type)=$id) AND ((ama_tovar_group.id)=???????))

суть вопроса в том , как сделать так, что бы автоматом убиралось AND ((ama_tovar_group.id)=$id_type)), или чтоюы $id_type становилосьчислом от 0 до бесконечности (может * незнаю...)

metton 27.09.2002 02:42

можно простыми ифами...
если переменная передана - один запрос,
если же нет - другой...

Froggy 27.09.2002 09:51

Я кстати так и делал...
 
Что-то типа этого:
$sql_c = "select count(topic_id) from topics";
switch ($section){
case "1": $sql = "$sql_c where section='1'";
$section_name = strtoupper($sec_1);
break;
case "2": $sql = "$sql_c where section='2'";
$section_name = strtoupper($sec_2);
break;
case "3": $sql = "$sql_c where section='3'";
$section_name = strtoupper($sec_3);
break;
case "all":$sql = $sql_c; $section_name = strtoupper($sec_123);
break;
}
$result = mysql_query($sql);

ama2001 27.09.2002 10:15

о да огромный кекс люди...

Sami 01.10.2002 11:27

$str="(((ama_tovar.id_type)=$id)";
if ($id_type>0) $str= $str+ "AND ((ama_tovar_group.id)=$id_type))";

LUNA 13.10.2002 06:26

На самом деле, просто надо один день попариться и написать Query.class, который имеет кучу методов под каждую SQL конструкцию... Я вот попарился - написал, теперь не надо воротить все эти if-else, которые абсолютно невозможно читать, если у тебя серьезный запрос с сабселектами и join statements. Очень советую =)

metton 14.10.2002 02:10

2LUNA
а можно поподробнее...
или хотя бы абстрактный пример одного метода...

LUNA 14.10.2002 07:30

Пишешь класс с методом для каждой SQL составляющей запроса...

Код:


Class Query {

  var $_from_table;
  var $_data_to_select = "*";
  var $_where_condition = "";
  var $_group_by_condition = "";
  var $_order_by_condition = "";
  var $_limit_condition = "";
  // ... и так далее ...

  // потом по отдельному методу для каждой конструкции.
  // То есть, например, для 'WHERE' это выглядет примерно так:

  function whereAdd($cond = NULL, $conj = "AND")
  {
    if ($cond == NULL) {
      $this->_where_condition = "";
      return;
    }
    if (!empty($this->_where_condition)) {
      $this->_where_condition .= " $conj $cond";
      return;
    }
    $this->_where_condition = " WHERE $cond";
  }

  // ... и так далее ...

  function getQuery() {
    return "SELECT " . $this->_data_to_select .
              " FROM "  . $this->_from_table    .
              $this->_where_condition            .
              $this->_group_by_condition        .
              $this->_order_by_condition        .
              $this->_limit_condition;
  }

}

А потом уже составлешь свой query используя эти методы:

Код:

  $query_object = new Query("my_table");
  $query_object->selectAdd("table.column");
  $query_object->fromAdd("new_table");
  $query_object->whereAdd("id < 40");
  $query_object->toString();

и так далее... Думаю, мысль ясна... У PEAR PPL это все уже написано, можно взять за основу и адаптировать под свои нужды (базу данных).


Часовой пояс GMT +4, время: 10:44.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.