Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Составной Mysql запрос

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
SergeantPEPPER
Отправлено: 21 Февраля, 2009 - 17:34:23
Post Id



Частый гость


Покинул форум
Сообщений всего: 245
Дата рег-ции: Сент. 2007  
Откуда: Казань


Помог: 0 раз(а)




Добрый вечер!

Есть две таблицы:

`table1`: состоит из `date`,`time`,`ip`,`url_from`,`url_to` (дата, время, IP-адрес, URL с которого зашел, URL куда зашел)

`table2`: состоит из `ip`,`browser`,`os_type` (ip aдрес пользователя, наименование используемого браузера, наименование используемой ОС)

Необходимо с помощью одного запроса вывести html-таблицу с полями: IP-адрес, браузер, ос, URL с которого зашел первый раз, URL на который зашел последний раз, кол-во просмотренных уникальных URL-адресов, общее время пребывания на сайте.

Никак не могу понять как сделать это все ОДНИМ запросом (особенно две последние характеристики), помогите пожалуйста!
 
 Top
Champion Супермодератор
Отправлено: 21 Февраля, 2009 - 18:01:22
Post Id



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


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




В этой ситуации такое подойдет
select table1.*, table2.browser, table2.os from table1, table2 where table1.ip = table2.ip
 
 Top
SergeantPEPPER
Отправлено: 21 Февраля, 2009 - 18:09:34
Post Id



Частый гость


Покинул форум
Сообщений всего: 245
Дата рег-ции: Сент. 2007  
Откуда: Казань


Помог: 0 раз(а)




Неееееее Улыбка Все не так просто (такое я бы и не спрашивал)

Нужно выдергивать url_from и url_to только те, которые удовлетворяют условию по времени (date, time), а также еще выдернуть уникальные url и подсчитать общее время нахождения на сайте.
 
 Top
Champion Супермодератор
Отправлено: 21 Февраля, 2009 - 18:18:57
Post Id



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


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




ничего не понял
(Добавление)
Придумай пример. Что есть в таблице, что должно получиться.
 
 Top
SergeantPEPPER
Отправлено: 21 Февраля, 2009 - 18:23:46
Post Id



Частый гость


Покинул форум
Сообщений всего: 245
Дата рег-ции: Сент. 2007  
Откуда: Казань


Помог: 0 раз(а)




Ок. У меня есть тестовое задание (автор не Я) Улыбка Выглядит так:

Цитата:
2.1 Даны 2 файла с логами.
В 1-ом файле в каждой строке выводится 5 атрибутов разделенные символом «|»: дата, время, IP-адрес пользователя, URL с которого зашел, URL куда зашел.
Во 2-ом — в каждой строке 3 атрибута, также разделенные символом «|»: ip aдрес пользователя, наименование используемого браузера, наименование используемой ОС.
Необходимо считать данные из этих файлов и записать в базу данных mysql.
Затем с помощью одного запроса вывести html-таблицу с полями: IP-адрес, браузер, ос, URL с которого зашел первый раз, URL на который зашел последний раз, кол-во просмотренных уникальных URL-адресов, общее время пребывания на сайте.


В базу данных я данные занес, осталось только составить этот дурацкий запрос (хотя ИМХО он извращенский и на практике не применяется). Вот так...

Затруднения вызывают послдение пункты
 
 Top
Champion Супермодератор
Отправлено: 21 Февраля, 2009 - 19:56:55
Post Id



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


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




SELECT
a.ip, a.browser, a.os,
(SELECT first 1 fromurl FROM table1 t2 WHERE a.ip = t2.ip HAVING min(time) ) first_from,
(SELECT first 1 tourl FROM table1 t2 WHERE a.ip = t2.ip HAVING max(time) ) last_to,
(SELECT count(distinct to_url) FROM table1 t2 WHERE a.ip = t2.ip ) count_urls,
(SELECT max(time) - min(time) FROM table1 t2 WHERE t2.ip = a.ip)
FROM table2 a

Может быть так?
 
 Top
andrew_talanov
Отправлено: 09 Октября, 2016 - 14:22:20
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Окт. 2016  


Помог: 0 раз(а)




<?php

/**
* Created by PhpStorm.
* User: andrew
* Date: 8/6/2016
* Time: 2:34 PM
*/

$servername = "localhost";
$username = "root";
$password = "superuser";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}

// Create database
$sql = "CREATE DATABASE myDB";
if ($conn->query($sql) === TRUE) {
echo "Database created successfully\n";
$conn->close();
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

// sql to create table
$sql = "CREATE TABLE Log1 (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
date DATE,
time INT(6),
userIP VARCHAR(50),
URLfrom VARCHAR(100),
URLto VARCHAR(100)
)";

if ($conn->query($sql) === TRUE) {
echo "Table Log1 created successfully\n";
// sql to create table
$sql = "CREATE TABLE Log2 (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
userIP VARCHAR(50),
browser VARCHAR(50),
os VARCHAR(50)
)";
if ($conn->query($sql) === TRUE) {
echo "Table Log2 created successfully\n";
$fh = fopen('Log1.txt','r');
if ($fh != FALSE) {
flock($fh,LOCK_EX) or die($php_errormsg);
while(!feof($fh)) {
$string = fgets($fh);
$s1 = strtok($string, "|");
$s2 = strtok("|");
$s3 = strtok("|");
$s4 = strtok("|");
$s5 = strtok("|");
$sql = "INSERT INTO Log1 (date, time, userIP, URLfrom, URLto)
VALUES ($s1, $s2, $s3, $s4, $s5)";
if ($conn->query($sql) === TRUE) {
echo "Log1: New record created successfully\n";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
flock($fh,LOCK_UN) or die($php_errormsg);
fclose($fh) or die($php_errormsg);
} else {
echo "Error: " . $php_errormsg . "\n";
$sql = "INSERT INTO Log1 (date, time, userIP, URLfrom, URLto)
VALUES ('2006-08-07', 16, '200.150.1.2',
'http://www.w3schools.com/',
'http://www.w3schools.com/sql/sql_datatypes.asp')";
if ($conn->query($sql) === TRUE) {
echo "Log1: New record created successfully\n";
$sql = "INSERT INTO Log1 (date, time, userIP, URLfrom, URLto)
VALUES ('2006-08-07', 17, '200.150.1.2',
'https://mail.aol.com/webmail-std/en-us/suite',
'http://www.aol.com/?molhp=txtlnkusaolp00000051&ncid=mbr_aolacqint00000001')";
if ($conn->query($sql) === TRUE) {
echo "Log1: New record created successfully\n";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
$fh = fopen('Log2.txt','r');
if ($fh != FALSE) {
flock($fh, LOCK_EX) or die($php_errormsg);
while(!feof($fh)) {
$string = fgets($fh);
$s1 = strtok($string, "|");
$s2 = strtok("|");
$s3 = strtok("|");
$sql = "INSERT INTO Log2 (userIP, browser, os)
VALUES ($s1, $s2, $s3)";
if ($conn->query($sql) === TRUE) {
echo "Log2: New record created successfully\n";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
flock($fh,LOCK_UN) or die($php_errormsg);
fclose($fh) or die($php_errormsg);
} else {
echo "Error: " . $php_errormsg . "\n";
$sql = "INSERT INTO Log2 (userIP, browser, os)
VALUES ('200.150.1.2', 'netscape 7.0',
'windows 8')";
if ($conn->query($sql) === TRUE) {
echo "Log2: New record created successfully\n";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
$sql = "SELECT Log1.userIP, SUM(Log1.time) AS sumtime, Log1.URLfrom,
COUNT(Log1.URLto) AS cntURLto, Log2.browser, Log2.os
FROM (Log1 JOIN Log2 ON Log1.userIP=Log2.userIP)
GROUP BY userIP";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
$fh = fopen('Stat.html','w');
if ($fh != FALSE) {
flock($fh, LOCK_EX) or die($php_errormsg);
// output data of each row
fprintf($fh,"<!DOCTYPE HTML>\r\n");
fprintf($fh,"<html>\r\n");
fprintf($fh,"<body>\r\n");
fprintf($fh,"<div>\r\n");
fprintf($fh,"<table border='1px solid black'>\r\n");
fprintf($fh,"<tr>\r\n");
fprintf($fh,"<td>\r\n");
fprintf($fh,"IP-address\r\n");
fprintf($fh,"</td>\r\n");
fprintf($fh,"<td>\r\n");
fprintf($fh,"Browser\r\n");
fprintf($fh,"</td>\r\n");
fprintf($fh,"<td>\r\n");
fprintf($fh,"OS\r\n");
fprintf($fh,"</td>\r\n");
fprintf($fh,"<td>\r\n");
fprintf($fh,"URL from\r\n");
fprintf($fh,"</td>\r\n");
fprintf($fh,"<td>\r\n");
fprintf($fh,"URL to\r\n");
fprintf($fh,"</td>\r\n");
fprintf($fh,"<td>\r\n");
fprintf($fh,"Time\r\n");
fprintf($fh,"</td>\r\n");
fprintf($fh,"</tr>\r\n");

while($row = $result->fetch_assoc()) {
echo "userIP " . $row["userIP"] . " browser " .
$row["browser"] . " os " . $row["os"] . "\n" . "sum time " .
$row["sumtime"] ."\n" .
"URLfrom " . $row["URLfrom"] . "\n" .
"count URLto " . $row["cntURLto"] . "\n";
fprintf($fh,"<tr>\r\n");
fprintf($fh,"<td>\r\n");
fprintf($fh, $row["userIP"]);
fprintf($fh,"</td>\r\n");
fprintf($fh,"<td>\r\n");
fprintf($fh, $row["browser"]);
fprintf($fh,"</td>\r\n");
fprintf($fh,"<td>\r\n");
fprintf($fh, $row["os"]);
fprintf($fh,"</td>\r\n");
fprintf($fh,"<td>\r\n");
fprintf($fh, $row["URLfrom"]);
fprintf($fh,"</td>\r\n");
$sql2 = "SELECT URLto FROM Log1 WHERE userIP='" .
$row["userIP"] . "' ORDER BY id DESC LIMIT 1";
$result2 = $conn->query($sql2);
if ($result2->num_rows > 0) {
$row2 = $result2->fetch_assoc();
fprintf($fh,"<td>\r\n");
fprintf($fh, $row2["URLto"]);
fprintf($fh,"</td>\r\n");
}
fprintf($fh,"<td>\r\n");
fprintf($fh, $row["sumtime"]);
fprintf($fh,"</td>\r\n");
fprintf($fh,"</tr>\r\n");
}
fprintf($fh,"</table>\r\n");
fprintf($fh,"</div>\r\n");
fprintf($fh,"</body>\r\n");
fprintf($fh,"</html>\r\n");
fflush($fh) or die($php_errormsg);
flock($fh,LOCK_UN) or die($php_errormsg);
fclose($fh) or die($php_errormsg);
}
} else {
echo "0 results";
}
} else {
echo "Error creating table: " . $conn->error;
}
} else {
echo "Error creating table: " . $conn->error;
}
} else {
echo "Error creating database: " . $conn->error;
$sql = "DROP DATABASE myDB";
$conn->query($sql);
}
?>

Log1.txt:
'2006-08-07'|16|'200.150.1.2'|'http://www.w3schools.com/'|'http://www.w3schools.com/sql/sql_datatypes.asp'
'2006-08-07'|17|'200.150.1.2'|'https://mail.aol.com/webmail-std/en-us/suite'|'http://www.aol.com/?molhp=txtlnkusaolp00000051&ncid=mbr_aolacqint00000001'

Log2.txt:
'200.150.1.2'|'netscape 7.0'|'windows 8'
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB