2013-10-26 3 views
2

Я пытаюсь использовать Highcharts для отображения посещений пользователей для каждого свойства, однако я не уверен, как настроить SQL-запрос для правильного отображения этого. Было бы намного проще, если в нашей базе данных просто перечисляются посещения страниц в течение определенных периодов времени, но она хранится для каждого пользователя, за собственность, за одно посещение, как вы можете увидеть здесь:Использование Highcharts с mysql для посещений страницы

Data

Я знаю, что я должен запросить количество посещений на каждое свойство и отсортировать его по месяцам, но именно лучший способ сделать это - вне меня. Это то, что у меня есть до сих пор:

<?php 

$con = mysql_connect('localhost', 'root', 'root'); 
if (!$con) { 
    die('Could not connect: '.mysql_error()); 
} 

mysql_select_db('demeure', $con); 

//$date_start = $_POST['date_start']; 
//$date_end = $_POST['date_end']; 
$date_start = '2012-07-01 00:00:00'; 
$date_end = '2012-08-01 00:00:00'; 

$result = mysql_query(" 
    SELECT 
    COUNT(id) AS count, 
    created_at 
    FROM 
    user_property_visits 
    WHERE 
    created_at BETWEEN '$date_start' AND '$date_end'"); 

while ($row = mysql_fetch_array($result)) { 
    echo $row['count'] . "\t" . $row['created_at']. "\n"; 
} 

mysql_close($con); 

?> 

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

ответ

0

Я был в состоянии решить эту проблему следующим:

<?php 

$host = "localhost"; 
$user = "root"; 
$pass = "root"; 
$database = "demeure_new"; 

$dsn = "mysql:dbname=$database;host=$host"; 
$pdo = new PDO($dsn, $user, $pass); 

$query = "SELECT DAY(created_at) AS day, MONTH(created_at) AS month, YEAR(created_at) AS year, count(user_id) AS count FROM user_property_views GROUP BY day"; 
$stmt = $pdo->prepare($query); 
$stmt->execute(); 

$result = $stmt->fetchAll(PDO::FETCH_ASSOC); 
$stmt->closeCursor(); 

$newArray = array(); 
foreach($result as $r) 
    $newArray[$r["year"]][$r["month"]][$r["day"]] = $r["count"]; 

//print_r($newArray); 

json_encode($result, JSON_NUMERIC_CHECK); 

echo json_encode($newArray); 
?> 
+0

Используемый JSON вместо этого работает много лучше –

0

Я не уверен, что вы хотите этого, но вы можете отфильтровать период в предложении WHERE. Проверьте, если это может помочь:

<?php 

// Show all PHP errors. 
error_reporting(E_ALL); 

// Connect with MySQL 
$con = mysql_connect('localhost', 'your_user', 'your_password'); 
if (!$con) { 
    die('Could not connect: '.mysql_error()); 
} 
mysql_select_db('demeure', $con); 

// Obtain date range from $_POST or 
// manually edit this. 

//$date_start = $_POST['date_start']; 
//$date_end = $_POST['date_end']; 
$date_start = '2012-07-20 20:30:00'; 
$date_end = '2012-07-20 20:37:00'; 

// Query with GROUP BY 
$result = mysql_query(" 
    SELECT 
    COUNT(id) AS `count`, 
    created_at 
    FROM 
    user_property_visits 
    WHERE 
    created_at BETWEEN '$date_start' AND '$date_end' 
    GROUP BY 
    created_at"); 

while ($row = mysql_fetch_array($result)) { 
    echo 'Count: ' . $row['count'] . '<br/>' . 'Group by date: ' . $row['created_at'] . '<br/>'; 
} 

// With the schema used in SQL Fiddle, this code will reproduce 
// 
// A PHP Error was encountered 
// Severity: 8192 
// Message: mysql_connect(): The mysql extension is deprecated and 
// will be removed in the future: use mysqli or PDO instead 
// 
// Filename: views/home.php 
// 
// Line Number: 7 
// 
// Count: 4 
// Group by date: 2012-07-20 20:36:28 

mysql_close($con); 

?> 

Используя это, вы можете использовать DatePicker, например, чтобы выбрать диапазон дат и получить эти значения с помощью POST (АЯКС).

Check this SQL Fiddle

+0

После замены запроса с этим он приходит с пустой страницы; мне нужно изменить $ echo, чтобы отобразить это правильно? –

+0

Я поставил только запрос. Я буду редактировать весь код, как вы опубликовали. – thiagobraga

+0

Я видел ваше редактирование пару минут назад и пытался использовать его, но, к сожалению, он дает мне тот же результат пустой страницы. Я попытался скопировать и вставить то, что вы написали, и просто заменил информацию о базе данных, но не повезло. –

Смежные вопросы