Как верно построить структуру БД спарсенных просмотров и вывести из неё данные в сводную таблицу HTML?

267
23 декабря 2021, 10:50

Уважаемые эксперты.

Подскажите, пожалуйста, логику действий по добавлению и выводу спарсенных данных:

С помощью PHP Simple Html Dom Parser парсятся названия и количество просмотров каждой статьи с данной страницы и заносятся в БД.

include ('simple_html_dom.php');
$html = file_get_html('http://baltluch.ru/ecotropa47');
foreach ($html->find('div.publication') as $pub)
{
    $title = $pub->find('h3.publ_title', 0);
    $stat = $pub->find('.pink_numbers', 0);
    echo "<tr><td>$title->plaintext</td><td>$stat</td></tr>";
    $conn = mysqli_connect($servername, $username, $password, $database);
    if (!$conn)
    {
        die("Connection failed: " . mysqli_connect_error());
    }
    $today = date("d.m.y");
    $sql = "INSERT INTO bluch_views (bluch_date, bluch_title, bluch_views) VALUES ('{$today}', '{$title->plaintext}', '{$stat}')";
    if (mysqli_query($conn, $sql))
    {
    }
    else
    {
        echo "Error: " . $sql . "<br>" . mysqli_error($conn);
    }
    mysqli_close($conn);
}

После занесения в БД, таблица выглядит так:

| bluch_date | bluch_title    | bluch_views |
| 08.12.2019 |название_статьи |     25      |
| 08.12.2019 |название_статьи2|     32      |
| 08.12.2019 |название_статьи3|     32      |

После обновления файла, например, на следующий день, в базу добавляются новые данные и таблица выглядит следующим образом:

| bluch_date | bluch_title    | bluch_views |
| 08.12.2019 |название_статьи |     25      |
| 08.12.2019 |название_статьи2|     32      |
| 08.12.2019 |название_статьи3|     32      |
| 09.12.2019 |название_статьи |     30      |
| 09.12.2019 |название_статьи2|     40      |
| 09.12.2019 |название_статьи3|     50      |

Выводя данные из таблицы в отдельный файл:

$sql = mysqli_query($link, 'SELECT `bluch_title` FROM `bluch_views`');
while ($result = mysqli_fetch_array($sql))
{
    echo "<tr><td>{$result['bluch_title']}</td><td>{$result['bluch_views']}</td></tr>";
}

Получаю таблицу такого вида в HTML:

|    Дата    |   ИМЯ СТАТЬИ   |  Просмотры  |
| 08.12.2019 |название_статьи |     25      |
| 08.12.2019 |название_статьи2|     32      |
| 08.12.2019 |название_статьи3|     32      |
| 09.12.2019 |название_статьи |     30      |
| 09.12.2019 |название_статьи2|     40      |
| 09.12.2019 |название_статьи3|     50      |

Вопрос: Какую создать структуру БД, чтобы реализовать вывод в отдельный файл HTML-таблицы такого вида:

|   ИМЯ СТАТЬИ   |  08.12.2019 | 09.12.2019 | 10.12.2019 | 11.12.2019 |
|название_статьи |     25      |     30     |     35     |     44     |
|название_статьи2|     32      |     40     |     48     |     52     |
|название_статьи3|     32      |     38     |     52     |     63     |

То есть после каждодневного обновления файла, в БД заносятся данные о просмотре каждой статьи, а затем в отдельном файле в таблице добавляется столбец с данными о просмотрах за каждый день.

Буду благодарен за любую помощь!

Answer 1

Я потренировался на своей таблице https://ibb.co/h269716 таблица

и вот мой код

<?php
$conn = new mysqli('localhost', '**', '', 'test');
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
$query = "select * from table01 ";
$result = $conn->query($query);
while($row2 = mysqli_fetch_assoc($result))
{
$arr2[]=$row2;
}
$row=count($arr2);
for($i = 0; $i < $row; $i++) {
$dat[$arr2[$i]['date1']]=1; //делаем уникальную дату(ключь не может повторятся)
$name[$arr2[$i]['bluch_title']]=2;//делаем уникальное название(ключь не может повторятся)
}
echo '<table border="1">';
echo '<tr>';
echo '<td>Name';
foreach ($dat as $key => $value) {
    echo'<td>'.$key;
}
echo '</td>';
echo '</tr>';

foreach ($name as $key1 => $value1) {

foreach ($dat as $key => $value) {
$query0 = "select * from table01 where date1='".$key."' and bluch_title='".$key1."'";
$result2 = $conn->query($query0);
while($row21 = mysqli_fetch_assoc($result2))
{
$arr21[]=$row21['bluch_views'];
}
}}
$res=array_chunk($arr21, 2, TRUE); //разбиваем массив
foreach ($res as $key6 => $value6) {
    # code...
    $fud[]=array_values($value6); //пересоздаём ключи во вложенном массиве
}
$k='-1';
foreach ($name as $key1 => $value1) {
$k++;
echo'<tr><td>'.$key1.'<td>'.$fud[$k][0].'<td>'.$fud[$k][1].'</td>';
}
echo '</table>';
?>

вот результат https://ibb.co/8xXszyn

READ ALSO
Открытие процесса посредством PHP

Открытие процесса посредством PHP

Необходимо реализовать открытие стороннего приложения, после того, как придёт GET (или POST, неважно) запрос от пользователя, далее, это приложение...

112
Как решить проблему с php.ini?

Как решить проблему с php.ini?

Пытаюсь запустить composer чтобы тот стянул проект, но выходят вот такие ошибки:

232
При попытке парсинга сайта с использованием cUrl выдаёт &quot;setting cookie...&quot;

При попытке парсинга сайта с использованием cUrl выдаёт "setting cookie..."

Нужно спарсить данные с этого сайта https://bankrotfedresurs

217