Перейти к содержимому


Список значений и работа с ним.


Сообщений в теме: 20

#1 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 20 Февраль 2012 - 07:26

Уважаемые программисты, и вновь я со своим крохотным опытом.

Задача:

1. Получить список значений одного из полей таблицы.
2. Сделать цикл из значений полей таблицы.
3. В цикле перебирать и выбирать нужные значения из другой таблицы.

Приступаем к исполнению:

1. Получаем список значений одного из полей таблицы:

  $sql = "SELECT * FROM ". DATA_TABLE ."82 WHERE f1149 = $ID";
  $res = mysql_query($sql);
  $row = mysql_fetch_array($res);
  $code = explode("\r\n", $row); // Вот тут я не уверен что сделал верно :(/>

2. Делаем цикл из значений полей таблицы, которые выше получили:

foreach ($code as $adcode)
  {
  $dat['adcode'] = $adcode;

Ну а далее просто :)

Вопрос в следующем, правильно ли я сделал запросы? И действительно ли $adcode будет равен каждый раз одному из значений поля f1149 при постепенном прохождении цикла?

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 20 Февраль 2012 - 10:24

1. $row - это вся строка, забыли указать конкретное поле.
2.
foreach ($code as $adcode)
  {
    if (Ваше условие) $dat[] = $adcode;
  }
В массиве $dat будут только те элементы из $code, которые вы отобрали через условие

#3 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 20 Февраль 2012 - 11:09

Извините, но я не совсем понял, что значит вся строка?

Мне необходимо получить массив значений поля f1149.

А вторым пунктом "перебирая" каждое из значений поля f1149 проводить доп. действия.

#4 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 20 Февраль 2012 - 11:12

Т. е. вот такой код:

$sql = "SELECT * FROM ". DATA_TABLE ."82 WHERE f1149 = $ID";
  $res = mysql_query($sql);
  $row = mysql_fetch_array($res);
  $code = explode("\r\n", $row);

foreach ($code as $adcode)
  {
    $dat[] = $adcode;

    echo $adcode;
  }

Выведет все значения поля f1149? Верно?

#5 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 20 Февраль 2012 - 11:24

Цитата

Извините, но я не совсем понял, что значит вся строка?
Массив $row выдает вам всю текущую строку, т.е. в нем содержатся все поля данной строки, в качестве элементов массива. Например, ваше поле f1149 будет выглядеть как $row['f1149'].

Цитата

Мне необходимо получить массив значений поля f1149
По всем строкам таблицы что ли? Тогда неверен как сам запрос, так и код его обработки. Во-первых, что дает вам условие f1149 = $ID? Вы просто отбираете все строки с значением поля f1149, равным текущему $ID. Тогда зачем вам далее то извлекать это поле, не понимаю?

#6 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 20 Февраль 2012 - 11:27

Просмотр сообщенияdolphin (20 Февраль 2012 - 11:12) писал:

Выведет все значения поля f1149? Верно?
Нет конечно, этот код по большому счету бессмысленен. Рекомендую почитать руководства по PHP с примерами работы с БД, для понимания принципов работы. Плюс вы всегда можете сами выяснить причины неверной работы, тестируя свой код через вывод значений переменных.

#7 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 20 Февраль 2012 - 11:35

Понял. спасибо. Сейчас попробую за помощью к руководству по php обратиться.

#8 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 20 Февраль 2012 - 11:53

Получается, что так:

  $sqlQuery = "SELECT * FROM ".DATA_TABLE."82";
  $result = mysql_query($sqlQuery);
  $row['1149'] = mysql_fetch_array($result);
  $code = $row;

foreach ($code as $adcode)
  {
    $dat[] = $adcode;

    echo $adcode;
  }



Так правильно? Теперь мы получим на экране все значения поля 1149 по порядку? :)

#9 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 20 Февраль 2012 - 12:05

Нет, опять неверно, хотя запрос стал более осмысленным. Руководства то смотрели?

  $sqlQuery = "SELECT * FROM ".DATA_TABLE."82";
  $result = mysql_query($sqlQuery);
  while ($row = mysql_fetch_array($result)) // цикл - последовательно считываем в переменную $row каждую из строк таблицы, которые возвращает запрос
	{
	  $code[] = $row['f1149']; // заносим в массив $code поле f1149 из текущей считываемой строки
	}
// в результате у нас в $code массив из всех пройденных по запросу строк
Так понятнее?

По циклу foreach ниже - не совсем понятно зачем он вообще нужен. Поясните еще раз в чем задача.

#10 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 20 Февраль 2012 - 12:24

Да, руководства смотрел. Уже многое облазил... Если честно голова вот вот взорвется! :)

Задача уже упростилась до нельзя:

Необходимо вывести все значения строк поля f1149 :)

#11 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 20 Февраль 2012 - 12:28

Хорошо, по Вашему запросу составил представление:

Подготовка данных:
  $sqlQuery = "SELECT * FROM ".DATA_TABLE."82";
  $result = mysql_query($sqlQuery);
  while ($row = mysql_fetch_array($result)) // цикл - последовательно считываем в переменную $row каждую из строк таблицы, которые возвращает запрос
	    {
		  $code[] = $row['f1149']; // заносим в массив $code поле f1149 из текущей считываемой строки
   $data['code'] = $code;  
		 $lines[] = $data['code'];  
	    }

    $smarty->assign("lines", $lines);

Отображение:
Все коды наших агентов:<br />
{foreach from=$lines item=data}
{$data.code}<br />
{/foreach}


#12 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 20 Февраль 2012 - 12:32

Вот блин я дурак, таблица не 82, а 89!!!!!! :((((((((((((((((((

#13 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 20 Февраль 2012 - 12:35

Итак... начинаю все заново...

#14 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 20 Февраль 2012 - 12:39

Вооооо, что то похожее... Теперь выводится столько же строк, но только не значение каждого, а слово array )))

#15 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 20 Февраль 2012 - 12:43

Просмотр сообщенияdolphin (20 Февраль 2012 - 12:28) писал:

$sqlQuery = "SELECT * FROM ".DATA_TABLE."82";
$result = mysql_query($sqlQuery);
while ($row = mysql_fetch_array($result)) // цикл - последовательно считываем в переменную $row каждую из строк таблицы, которые возвращает запрос
   {
	  $code[] = $row['f1149']; // заносим в массив $code поле f1149 из текущей считываемой строки
	  $data['code'] = $code;  
	  $lines[] = $data['code'];  
   }

$smarty->assign("lines", $lines);


Опять ошибка, правильный код:

$sqlQuery = "SELECT * FROM ".DATA_TABLE."82";
$result = mysql_query($sqlQuery);
while ($row = mysql_fetch_array($result)) // цикл - последовательно считываем в переменную $row каждую из строк таблицы, которые возвращает запрос
   {
	 $data['code'] = $row['f1149']; // заносим в массив $data поле f1149 из текущей считываемой строки
	 $lines[] = $data['code'];
   }
$smarty->assign("lines", $lines);

Отображение вроде верное.

#16 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 20 Февраль 2012 - 13:02

Не поверите. получилось! Только выводятся какие-то странные цифры, по одной на строку. Но никак не те значения что в поле 1149

#17 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 20 Февраль 2012 - 13:28

Скажите, а как сделать условие в запросе чтобы "взять" только активные записи? У меня почему то берутся все записи, как активные, так и удаленные, и те что находятся в архиве!!!

#18 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 20 Февраль 2012 - 13:44

Просмотр сообщенияdolphin (20 Февраль 2012 - 13:02) писал:

Не поверите. получилось! Только выводятся какие-то странные цифры, по одной на строку. Но никак не те значения что в поле 1149
А что за поле то вообще? Не поле связи случаем?

#19 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 20 Февраль 2012 - 13:45

Просмотр сообщенияdolphin (20 Февраль 2012 - 13:28) писал:

Скажите, а как сделать условие в запросе чтобы "взять" только активные записи?
WHERE status=0

0 - активные
1 - архив
2 - удаленные

#20 dolphin

    Активный участник

  • Пользователи
  • PipPipPip
  • 341 сообщений

Отправлено 20 Февраль 2012 - 14:24

Отлично. Теперь вроде бы все получается. Спасибо! В следующий раз усложним задачу! ;)





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных