Вы не зашли.
Главная » SQL » Как объединить запрос чтобы вывод из 2 строк выводился в одной?
#1. koji Off (3)
Участник
2015.06.28 17:05
На скриншоте приведен пример хранимых данных в БД, как бы выполнить запрос чтобы на выходе получить:
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
Вложения
file.png 16kb {477x161} [загрузок: 833]
#2. Gemorroj Off (107)
Administrator
2015.06.28 20:08
так не получится наверно. т.к. мы не знаем заранее кол-во выбираемых колонок. их может быть 3, а может и не 3.
#3. koji Off (3)
Участник
2015.06.28 23:11
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. koji Off (3)
Участник
2015.06.28 23:11
Вообще стоит сказать о каких данных речь.
Сегодня были клики по ссылке вверху страницы и по ссылке внизу страницы. Завтра я захочу сравнить количество кликов.
Поэтому нужно вывести:   дату,   количество кликов вверху,   количество кликов внизу страницы.
И так по каждому дню в новой строке. Но я не могу писать данные сразу в три колонки,  то есть добавить еще одну, потому клики вверху записываются под record_id=1 а клики внизу  record_id=2
#5. Gemorroj Off (107)
Administrator
2015.06.28 23:11
так а почему бы явно в таблице не сделать 2 колонки? count_top и count_bottom?
#6. koji Off (3)
Участник
2015.06.29 00:12
В том то и дело, там еще данные пишутся c ID 3, 4, 5, 6.... и только для этих данных требуется две колонки. Получится, что для всех других во второй колонке будет писаться "0" автоматом и использоваться она не  будет.
#7. koji Off (3)
Участник
2015.06.30 10:10
решил с помощью счетчика

Код:
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
Страниц: 1
Главная
WEB
PunBB Mod v0.6.2
0.017 s