• Главная
  • » SQL
  • » Как объединить запрос чтобы вывод из 2 строк выводился в одной?

#1 2015.06.28 17:46

koji
Участник
Зарегистрирован: 2014.07.13
Сообщений: 72
Карма: 3
Профиль

Как объединить запрос чтобы вывод из 2 строк выводился в одной?

На скриншоте приведен пример хранимых данных в БД, как бы выполнить запрос чтобы на выходе получить:
27.06.15    10    0
28.06.15    5      7

запрос типа

$query="SELECT DATE_FORMAT(add_date,'%d.%m.%Y'),total FROM stat WHERE add_date>CURDATE()-INTERVAL 7 DAY AND (record_id=1 OR record_id=2)";

выводит:
27.06.2015    10
27.06.2015    0
28.06.2015    5
28.06.2015    7


Вложения

Неактивен

#2 2015.06.28 20:53

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Как объединить запрос чтобы вывод из 2 строк выводился в одной?

так не получится наверно. т.к. мы не знаем заранее кол-во выбираемых колонок. их может быть 3, а может и не 3.

Активен

#3 2015.06.28 23:13

koji
Участник
Зарегистрирован: 2014.07.13
Сообщений: 72
Карма: 3
Профиль

Re: Как объединить запрос чтобы вывод из 2 строк выводился в одной?

Gemorroj, да, сложно как-то. Получается, что мне требуется запись с record_id=2 выводить вместе с записью где record_id=1, при этом опуская дату для record_id=2 на выводе, но данные группируются по дате.
То есть на выходе есть $row['0'] - это дата, $row[1] - это число для record_id=1 и еще бы сюда всунуть что-то типа $row[2] - число для record_id=2

Я открывал этот вопрос на stackoverflow, как вариант использовать одно поле и туда писать сразу два числа через точку, 5.7 а после, на выходе, разделить по точке с помощью explode() на два числа, но такое решение никому не понравилось.

Что скажешь, как можно это провернуть, при условии, что эти числа (то есть 10 и 0, 5 и7) всегда извлекаются вместе  ?

хотел вначале хранить их в DOUBLE, но он непредсказуем, после чего склоняться начал к VARCHAR.

Возможно, можно как-то в цикле  while($row=$result->fetch_row()) повлиять:
если для 28.06.2015   10   не получен  record_id=2 то пропускаем тег BR и лепим их вместе, а уже потом переносим строку BR.
Главная задача слепить их в одной строке:
дата   число (record_id=1)    число (record_id=2)   BR
дата   число (record_id=1)    число (record_id=2)   BR
дата   число (record_id=1)    число (record_id=2)   BR

Неактивен

#4 2015.06.28 23:28

koji
Участник
Зарегистрирован: 2014.07.13
Сообщений: 72
Карма: 3
Профиль

Re: Как объединить запрос чтобы вывод из 2 строк выводился в одной?

Вообще стоит сказать о каких данных речь.
Сегодня были клики по ссылке вверху страницы и по ссылке внизу страницы. Завтра я захочу сравнить количество кликов.
Поэтому нужно вывести:   дату,   количество кликов вверху,   количество кликов внизу страницы.
И так по каждому дню в новой строке. Но я не могу писать данные сразу в три колонки,  то есть добавить еще одну, потому клики вверху записываются под record_id=1 а клики внизу  record_id=2

Неактивен

#5 2015.06.28 23:43

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Как объединить запрос чтобы вывод из 2 строк выводился в одной?

так а почему бы явно в таблице не сделать 2 колонки? count_top и count_bottom?

Активен

#6 2015.06.29 00:02

koji
Участник
Зарегистрирован: 2014.07.13
Сообщений: 72
Карма: 3
Профиль

Re: Как объединить запрос чтобы вывод из 2 строк выводился в одной?

В том то и дело, там еще данные пишутся c ID 3, 4, 5, 6.... и только для этих данных требуется две колонки. Получится, что для всех других во второй колонке будет писаться "0" автоматом и использоваться она не  будет.

Неактивен

#7 2015.06.30 10:27

koji
Участник
Зарегистрирован: 2014.07.13
Сообщений: 72
Карма: 3
Профиль

Re: Как объединить запрос чтобы вывод из 2 строк выводился в одной?

решил с помощью счетчика

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
echo '<table><tr><th>Date</th><th>TOP link</th><th>BOTTOM link</th></tr>';
 
$result=$mysqli->query($query);
$i=0;
while($row=$result->fetch_row()) {
if($i%2==0) echo '<tr>';
if($i%2==0) {
echo '<td>'.$row[0].'</td>';
echo '<td>'.$row[1].'</td>';
} elseif($i%2==1) {
echo '<td>'.$row[1].'</td>';
}
if($i%2==1) echo '</tr>';
$i++;
}
 
echo '</table>';

на выходе:
28.06.2015    5    7
27.06.2015    10    0

Неактивен

  • Главная
  • » SQL
  • » Как объединить запрос чтобы вывод из 2 строк выводился в одной?

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.2
0.009 s