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


Вывод всех строк в представлении


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

#1 teacs

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

  • Пользователи
  • PipPipPip
  • 80 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

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

Добрый день! Подскажите, пожалуйста, возможно ли в представлении выводить информацию по строкам, а не суммированную или последнюю строку..
Пробовал вариант из документации (естественно подставляя номера своих таблиц и полей), выводит в представлении только последнюю строку..

$sqlQuery = "SELECT * FROM ".DATA_TABLE."42 WHERE f435='Аргумент'";
$result = mysql_query($sqlQuery);
$row = mysql_fetch_array($result);
$company['name'] = $row['f435']; // поле Название

Исходные данные:

Номер - 1 / Статус - В работе / Дата - 24.02.2014
Номер - 2 / Статус - В работе / Дата - 24.02.2014

Необходимо выводить данные в таком виде в представление (значение одного или нескольких полей всех выбранных строк):

Номер - 1 от 24-02-2014 , Номер - 2 от 24-02-2014

#2 CbCoder

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

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

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

Разумеется можно, как и в любом другом скрипте на PHP. В вашем случае будет так:

$sqlQuery = "SELECT * FROM ".DATA_TABLE."11"; // запрос ко всем строкам из таблицы 11
$result = sql_query($sqlQuery);
while ($row = sql_fetch_array($result)) // цикл по всем строкам запроса
{
  $number = $row['f111']; // поле Номер
  $date = $row['f222']; // поле Дата
  $strings[] = "Номер - ".$number." от ".date("d-m-Y", strtotime($date)); // формируем очередную строку и заносим в общий массив
}
$output = implode(" , ", $companies); // сливаем все строки в одну через запятую

Далее выводите переменную $output в отображении вашего отчета.

#3 teacs

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

  • Пользователи
  • PipPipPip
  • 80 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

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

Просмотр сообщенияCbCoder (24 Февраль 2014 - 11:23) писал:

Разумеется можно, как и в любом другом скрипте на PHP. В вашем случае будет так:

$sqlQuery = "SELECT * FROM ".DATA_TABLE."11"; // запрос ко всем строкам из таблицы 11
$result = sql_query($sqlQuery);
while ($row = sql_fetch_array($result)) // цикл по всем строкам запроса
{
  $number = $row['f111']; // поле Номер
  $date = $row['f222']; // поле Дата
  $strings[] = "Номер - ".$number." от ".date("d-m-Y", strtotime($date)); // формируем очередную строку и заносим в общий массив
}
$output = implode(" , ", $companies); // сливаем все строки в одну через запятую

Далее выводите переменную $output в отображении вашего отчета.
Спасибо, заработало как надо!! Только была ошибочка:

$output = implode(" , ", $strings); // сливаем все строки в одну через запятую

Сообщение отредактировал teacs: 24 Февраль 2014 - 12:06


#4 CbCoder

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

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

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

Да, скопировал невнимательно строку. Рад что заметили.

#5 CbCoder

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

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

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

Кстати, на данный момент рекомендуется все запросы проводить через наши sql-функции (подробнее см. тут). Т.е. в вашем случае это будет:

$result = data_select(11); // запрос ко всем строкам из таблицы 11 с помощью КБ-функции
while ($row = sql_fetch_array($result)) // цикл по всем строкам запроса
{
  $number = $row['f111']; // поле Номер
  $date = $row['f222']; // поле Дата
  $strings[] = "Номер - ".$number." от ".date("d-m-Y", strtotime($date)); // формируем очередную строку и заносим в общий массив
}
$output = implode(" , ", $strings); // сливаем все строки в одну через запятую

Причина, во-первых, в совместимости с другими возможными движками БД; во-вторых, в более безопасном, компактном и читабельном коде.

#6 teacs

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

  • Пользователи
  • PipPipPip
  • 80 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

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

Просмотр сообщенияCbCoder (24 Февраль 2014 - 12:38) писал:

Кстати, на данный момент рекомендуется все запросы проводить через наши sql-функции (подробнее см. тут). Т.е. в вашем случае это будет:

$result = data_select(11); // запрос ко всем строкам из таблицы 11 с помощью КБ-функции
while ($row = sql_fetch_array($result)) // цикл по всем строкам запроса
{
  $number = $row['f111']; // поле Номер
  $date = $row['f222']; // поле Дата
  $strings[] = "Номер - ".$number." от ".date("d-m-Y", strtotime($date)); // формируем очередную строку и заносим в общий массив
}
$output = implode(" , ", $strings); // сливаем все строки в одну через запятую

Причина, во-первых, в совместимости с другими возможными движками БД; во-вторых, в более безопасном, компактном и читабельном коде.

А значение на выборку "Тест" по типу поля "список" так включается?

$result = data_select(30, "`f1010`='Тест'");

Еще не могу понять, передаю в представление данные поле связь, а отображается только системное поле id с значением 1 или 2 (в зависимости от выбранных данных в основной таблице, их там всего две)..
Весь форум обыскал как передать значение..
Перенос значения поля связи в поле с типом текст ни к чему не привел.

Сообщение отредактировал teacs: 24 Февраль 2014 - 20:38


#7 wondertalik

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

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 24 Февраль 2014 - 23:44

Просмотр сообщенияteacs (24 Февраль 2014 - 20:25) писал:

Еще не могу понять, передаю в представление данные поле связь, а отображается только системное поле id с значением 1 или 2 (в зависимости от выбранных данных в основной таблице, их там всего две)..
Весь форум обыскал как передать значение..
Перенос значения поля связи в поле с типом текст ни к чему не привел.

$result = data_select(30, "`status` = 0 AND `f1010`='Тест'");
Выбирает только активные записи.
В поле связи содержится айди записи выбранного в поле из связанной таблице. Поэтому Вам нужно дополнительно делать выборку по айди из связанной таблице. Например, f444 - поле связи. Айди связанной таблицы - 84. Айди основной таблицы - 30.
$result = data_select(30, "`status` = 0 AND `f1010`='Тест'");
while($row = sql_fetch_assoc($result)) {
	$otherResult = data_select(84, "`id`=", $row['f444'], " LIMIT 1");
	$otherRow = sql_fetch_assoc($otherResult);
	//ваши действия.
}

Сообщение отредактировал wondertalik: 24 Февраль 2014 - 23:44


#8 teacs

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

  • Пользователи
  • PipPipPip
  • 80 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 25 Февраль 2014 - 13:06

Это еще один цикл получается, а соединить их как между собой?

#9 wondertalik

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

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 25 Февраль 2014 - 14:25

Просмотр сообщенияteacs (25 Февраль 2014 - 13:06) писал:

Это еще один цикл получается, а соединить их как между собой?
Что конкретно вы имеете ввиду?

#10 teacs

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

  • Пользователи
  • PipPipPip
  • 80 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 25 Февраль 2014 - 15:04

Просмотр сообщенияwondertalik (25 Февраль 2014 - 14:25) писал:

Что конкретно вы имеете ввиду?



$result = data_select(11, "`status` = 0 AND `f1010`='Тест'"); // запрос ко всем строкам из таблицы 11 с помощью КБ-функции
while ($row = sql_fetch_array($result)) // цикл по всем строкам запроса
{
  $number = $row['f111']; // поле Номер
  $date = $row['f222']; // поле Дата
  $car = $row['f333']; // поле связи
  $strings[] = "Номер - ".$number." от ".date("d-m-Y", strtotime($date)); // формируем очередную строку и заносим в общий массив
}
$output = implode(" , ", $strings); // сливаем все строки в одну через запятую

Как совместить? у меня либо ничего не показывается в поле, либо "array"

$result = data_select(11, "`status` = 0 AND `f1010`='Тест'");
while($row = sql_fetch_assoc($result)) {
$otherResult = data_select(84, "`id`=", $row['f444'], " LIMIT 1");
$otherRow = sql_fetch_assoc($otherResult);
// сюда надо вписать действия выше?
}

Сообщение отредактировал teacs: 25 Февраль 2014 - 15:08


#11 wondertalik

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

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 25 Февраль 2014 - 15:30

$otherRow - это массив (Array). Значит, чтобы вытащить значение обращаетесь $otherRow['f412'], где f412 - внутреннее имя поля. Чтобы я Вам пример полностью написал, айди таблицы поля связи f333 какой? Какие имена внутренние имена полей из этой таблицы Вы хотите взять?

#12 teacs

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

  • Пользователи
  • PipPipPip
  • 80 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 25 Февраль 2014 - 15:43

Просмотр сообщенияwondertalik (25 Февраль 2014 - 15:30) писал:

$otherRow - это массив (Array). Значит, чтобы вытащить значение обращаетесь $otherRow['f412'], где f412 - внутреннее имя поля. Чтобы я Вам пример полностью написал, айди таблицы поля связи f333 какой? Какие имена внутренние имена полей из этой таблицы Вы хотите взять?

ID таблицы основной: 30
Поле связи в основной таблице: 1160

ID таблицы подчиненной: 100
Поле в подчиненной таблице: 1000 (Марка)
Поле в подчиненной таблице: 1010 (Модель)
Поле в подчиненной таблице: 1020 (Гос. номер)

Сообщение отредактировал teacs: 25 Февраль 2014 - 15:47


#13 wondertalik

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

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 25 Февраль 2014 - 15:57

$result = data_select(11, "`status` = 0 AND `f1010`='Тест'"); // запрос ко всем строкам из таблицы 11 с помощью КБ-функции
while ($row = sql_fetch_array($result)) // цикл по всем строкам запроса
{
  $number = $row['f111']; // поле Номер
  $date = $row['f222']; // поле Дата
  $car_r = data_select(100, "`status` = 0 AND `id` = ", $row['f333'], " LIMIT 1"); // поле связи
  $rowCar = sql_fetch_assoc($car_r);
  $strings[] = "Номер - ".$number." от ".date("d-m-Y", strtotime($date)). " Марка - ".$rowCar['f1000']."/ Модель - ".$rowCar['f1010']. "/ Гос. номер - ".$rowCar['f1010']; // формируем очередную строку и заносим в общий массив
}
$output = implode(" , ", $strings); // сливаем все строки в одну через запятую
Не совсем понятно про основную таблицу, поэтому написал на примере кода выше.

#14 teacs

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

  • Пользователи
  • PipPipPip
  • 80 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 26 Февраль 2014 - 16:36

Просмотр сообщенияwondertalik (25 Февраль 2014 - 15:57) писал:

$result = data_select(11, "`status` = 0 AND `f1010`='Тест'"); // запрос ко всем строкам из таблицы 11 с помощью КБ-функции
while ($row = sql_fetch_array($result)) // цикл по всем строкам запроса
{
  $number = $row['f111']; // поле Номер
  $date = $row['f222']; // поле Дата
  $car_r = data_select(100, "`status` = 0 AND `id` = ", $row['f333'], " LIMIT 1"); // поле связи
  $rowCar = sql_fetch_assoc($car_r);
  $strings[] = "Номер - ".$number." от ".date("d-m-Y", strtotime($date)). " Марка - ".$rowCar['f1000']."/ Модель - ".$rowCar['f1010']. "/ Гос. номер - ".$rowCar['f1010']; // формируем очередную строку и заносим в общий массив
}
$output = implode(" , ", $strings); // сливаем все строки в одну через запятую
Не совсем понятно про основную таблицу, поэтому написал на примере кода выше.
Спасибо, все работает!!!





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

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