Обычная выборка

 
0
 
PHP
ava
Zorak | 19.02.2013, 12:49
Всем здраствуйте... есть такой ворос...
Сначала код:

function data_query($type)
  {
    $this -> sql_translate = "SELECT detailru FROM detailenru WHERE detailen = ";
  }

function ShowDescription($Data)
{
  $arr = explode(';',$Data);
  for ($i = 0; $i < 3; $i++)
{
    $arr1 = explode(':',$arr[$i]);
    $this -> data_query('translate');
    $this -> sql_translate = $this -> sql_translate."'".$arr1[0]."'";
    $result = db_query($this -> sql_translate);
    while ($node = db_fetch_object($result)) 
    {
      $arr1[0] = $node -> detailru;
    }
    echo '<li>'.$arr1[0].' : '.$arr1[1].'</li>';
  }
  echo '<li>&nbsp</li>';
}


И так, что должно делать: у функцию ShowDescription($Data) передается некий массив с аеглийскими словами, например
[0] -> item1:desc1
[1] -> item2:desc2
[2] -> item3:desc3
Надо чтобы в базе искало item1 и выбрало для него перевод и вывело на екран...
И так, что мы имеем:
1. Запросы в базуформируются правильно, более того они рабоспособны, т. е. проверял отдельно в интерфесе при работе с базой SQL...
2. Значение item в базе существуют 100%....

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

Т.е. должно выводить:
[0] -> итем1:desc1
[1] -> итем2:desc2
[2] -> итем3:desc3
а выводит:
[0] -> итем1:desc1
[1] -> item2:desc2
[2] -> item3:desc3

З.Ы. Естессно если в функции data_query формировать запрос полностью, то все работает, но минус в том что там можно задать только одно значение
Где моя ошибка?
Спасибо
Ответы (3)
ava
Aliance | 19.02.2013, 12:13 #
А зачем в data_query передается неиспользуемый параметр $type?
Не лучше ли сделать так:

function data_query($type)
{
    return "SELECT detailru FROM detailenru WHERE detailen = '" . mysql_real_escape_string($arr1[0]) . "'";
}
function ShowDescription($Data)
{
...
    $this->sql_translate = $this ->data_query($arr1[0]);
...
}


Далее, зачем ты делаешь три запроса в цикле, а потом внутри еще цикл? Не лучше ли сделать примерно так:

function data_query($type)
{
    $in = implode(',', $type);
    return "SELECT detailru FROM detailenru WHERE detailen IN (".$in.")";
}

$Data = 'item1:desc1;item2:desc2;item3:desc3';

function ShowDescription($Data)
{
  $arr = explode(';', $Data);
  $type = array();
  for ($i = 0; $i < count($arr); $i++) {
    $arr1 = explode(':', $arr[$i]);
    $type[] = array($arr1[0], $arr1[1]);
  }
  $this->sql_translate = $this ->data_query( $type );
   $result = db_query($this -> sql_translate);
    while ($node = db_fetch_object($result)) 
    {
      echo '<pre>'; var_dump($node); echo '</pre><hr>';
    }
}



Добавлено позднее:
Писал на коленке, может что-то не работает, но логика ясна быть должна.
ava
Zorak | 19.02.2013, 12:59 #
Да, логика ясна.. спасибо.... ша освобожусь перепробую, чуть поже отпишусь!

А $type передается, просто я убрал весь остальной код, оставил только тот, что касается моего вопроса....  осталось придумать как его сделать под совет Aliance....
ava
Zorak | 19.02.2013, 13:59 #
Такс... Извините, но переработать не могу ввиду уже написанного кода, в принципе он там номрмально написан, у меня просто нарушится ядро самых классов, которые я написал, для меня они очень удобные (я просто поубирал многие фильтры и кода когда вставлял сюда код)
Мне надо именно тут найти ошибку, так как данные довольно динамычные и если переделывать как советовали то надо пойти одним из двух путей:
1. Добавлять у функцию data_query еще один параметр для передачи.... ($type сам по себе - от него зависит сформированный запрос, ну и какойто $type2 надо для того что добавлять в конце запроса)
2. писать целую новую функцию отдельно для формировния данного запроса

Ни один ни второй варинт мне не подходит.....

З.Ы. Я вот сделал вывод так сказать дебага этого всего дела:

Передан массив деталей .. Вывод переданного массива деталей:
Special Features:MP4/MP5 Players;
Color:Black;
Item Weight:90 g;
Special Features:MP3/MP4 Players, FM Transmitter;
Place of Origin:Guangdong, China (Mainland);
Radio Response Bandwidth:206;
Car Maker:Acura, Aston Martin, Ford, Hyundai, Rolls-Royce;
Out Power:12-;
OSD Language:English;
Voltage:12V;
--------END-----------------

Вывод разбитого массива деталей:
Array
(
    [0] => Special Features:MP4/MP5 Players
    [1] => Color:Black
    [2] => Item Weight:90 g
    [3] => Special Features:MP3/MP4 Players, FM Transmitter
    [4] => Place of Origin:Guangdong, China (Mainland)
    [5] => Radio Response Bandwidth:206
    [6] => Car Maker:Acura, Aston Martin, Ford, Hyundai, Rolls-Royce
    [7] => Out Power:12-
    [8] => OSD Language:English
    [9] => Voltage:12V
    [10] => 
)
--------END-----------------

Начало прогона разбитого массива:Вывод разбитого массива деталей по деталям:
Array
(
    [0] => Special Features
    [1] => MP4/MP5 Players
)
--------END-----------------

Начало формирования запроса:
Запрос: SELECT detailru FROM detailenru WHERE detailen = 'Special Features'
ПЕРЕВОД: Специал Фючерз

Вывод результата:
Специал Фючерз : MP4/MP5 Players


Вывод разбитого массива деталей по деталям:
Array
(
    [0] => Color
    [1] => Black
)
--------END-----------------

Начало формирования запроса:
Запрос: SELECT detailru FROM detailenru WHERE detailen = 'Color'

Вывод результата:
Color : Black

Доставка: 15-60 дней


Отсюда видно что када дело доходит уже до Color: black то даже не исполняется запрос... вот почему ?(.. ибо если не нашло бы то вывело бы хотябы примерно так:

ПЕРЕВОД:


Добавлено позднее:
емм..... я вот что заметил, всем спасибо.. проблема решена.... кароче все просто, сразу невооруженным глазом и не заметиш....
Нашол иошибку еще в скрипте, который забивает базу данных. Там када передаются детали ($Data) изначально после первой строки в начало каждой следующей строки вставляется пробел -=(((.. уже исправил....

Решение:

function ShowDescription($Data)
{
...
$this -> sql_translate = $this -> sql_translate."'".$arr1[0]."'";
...
}


написал


function ShowDescription($Data)
{
...
$this -> sql_translate = $this -> sql_translate."'".trim($arr1[0])."'";
...
}

Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
ava  Aliance   Zorak
advanced
Отправить