В php&MySql разбираюсь на уровне администратора. Т.е. могу только установить. Но вот нужно мне наваять простенькую страничку. Честно признаюсь: делаю я это поиском кода.
И так, что имею. Базу данных с 4 таблицами.
User, Quantity, Type, Time
Данные в виде:
User:
user.name1
user.name2
Quantity:
100
50
Type:
Free
Busy
что нужно:
чтобы была информация о том, какой пользователь, какого типа имеет сумму чисел.
Т.е.
user.name1 Free 29 Busy 48
user.name2 Free 11 Busy 34
время пока не нужно.
Что имею:
$query = 'SELECT * FROM `Log`';
$result = mysql_query($query) or die(mysql_error() ."<br/>". $query);
// строим таблицу
$table = "<table border=0 width=100% align=center>\n";
while ($row = mysql_fetch_assoc($result))
{
$table .= "<tr>\n";
$table .= "<td>".$row['User']."</td>\n";
$table .= "<td>".$row['Quantity']."</td>\n";
$table .= "<td>".$row['Type']."</td>\n";
$table .= "<td>".$row['Time']."</td>\n";
$table .= "</tr>\n";
}
$table .= "</table>\n";
echo $table;
Как найти сумму по полям я нашёл:
{
$result = mysql_query ("SELECT SUM(Pages) FROM Log",$db);
$row = mysql_fetch_row($result);
echo $row[0];
}
А вот как сумма с условием, что пользователь такой-то, и тип такой-то?
Я даже не знаю, как это у гугла спросить..........
Спасибо!
Спустя 21 минута, 36 секунд (16.07.2012 - 13:21) sergeiss написал(а):
Если я правильно понял, ты хочешь сам разобраться, как это сделать? Тогда подсказываю:
1. Скачай хэлп по Мускулю. В виде CHM мне лично больше всего нравится. Можно и в он-лайне смотреть.
2. Найди в хэлпе описание для SELECT, а там уже читай про WHERE.
Изучишь, если что не поймешь - спрашивай! Подскажем
1. Скачай хэлп по Мускулю. В виде CHM мне лично больше всего нравится. Можно и в он-лайне смотреть.
2. Найди в хэлпе описание для SELECT, а там уже читай про WHERE.
Изучишь, если что не поймешь - спрашивай! Подскажем
Спустя 9 минут, 7 секунд (16.07.2012 - 13:30) exonix написал(а):
Цитата (sergeiss @ 16.07.2012 - 10:21) |
Если я правильно понял, ты хочешь сам разобраться, как это сделать? Тогда подсказываю: 1. Скачай хэлп по Мускулю. В виде CHM мне лично больше всего нравится. Можно и в он-лайне смотреть. 2. Найди в хэлпе описание для SELECT, а там уже читай про WHERE. Изучишь, если что не поймешь - спрашивай! Подскажем |
Спасибо. Да, хотелось бы самому.
Т.е. получается, это вопрос скорее не по php а по mysql?
Спустя 4 минуты, 52 секунды (16.07.2012 - 13:35) sergeiss написал(а):
Цитата (exonix @ 16.07.2012 - 14:30) |
Т.е. получается, это вопрос скорее не по php а по mysql? |
Да, ты верно понял И вообще. При работе с БД надо стараться сделать такой запрос, чтобы потом в ПХП только принять данные и вывести их, никак более не обрабатывать. В большинстве случаев такой подход позволяет более быстро и более качественно вести обработку.
При этом, естественно, могут стать значимыми вопросы оптимизации БД. Но зато в целом работа будет более правильная.
PS. Переношу тему в раздел "PHP + SQL".
Спустя 2 часа, 48 минут, 14 секунд (16.07.2012 - 16:24) exonix написал(а):
есть продвижение:
В мускл получаю красивую табличку:
Эту команду нужно вставить в php. Есть аналог:
пробую схитрить, просто заменить "SELECT SUM(Quantity) FROM Log" но не работает ))) Точнее, я в браузере вижу только имя первого в списке пользователя...
в какую сторону смотреть?
SELECT User,Type,SUM(Quantity) FROM Log GROUP BY User,Type;
В мускл получаю красивую табличку:
mysql> SELECT User,Type,SUM(Quantity) FROM Log GROUP BY User,Type;
+---------------------+---------------------+---------------+
| User | Type | SUM(Quantity) |
+---------------------+---------------------+---------------+
| user.name1 | TYPE_1 | 32 |
| user.name1 | TYPE_2 | 1 |
| user.name2 | TYPE_1 | 19 |
| user.name3 | TYPE_1 | 1 |
| user.name3 | TYPE_2 | 13 |
| user.name4 | TYPE_1 | 17 |
| user.name4 | TYPE_2 | 19 |
| user.name5 | TYPE_1 | 164 |
| user.name5 | TYPE_2 | 23 |
| user.name6 | TYPE_2 | 6 |
| user.name7 | TYPE_1 | 77 |
| user.name7 | TYPE_2 | 6 |
| user.name8 | TYPE_1 | 9 |
+---------------------+---------------------+---------------+
13 rows in set (0.00 sec)
Эту команду нужно вставить в php. Есть аналог:
$result = mysql_query ("SELECT SUM(Quantity) FROM Log",$db);
$row = mysql_fetch_row($result);
echo $row[0];
пробую схитрить, просто заменить "SELECT SUM(Quantity) FROM Log" но не работает ))) Точнее, я в браузере вижу только имя первого в списке пользователя...
в какую сторону смотреть?
Спустя 50 минут, 42 секунды (16.07.2012 - 17:14) exonix написал(а):
УРА !!! Додумался !!!
выглядит так:
Сейчас буду играться с полем Time...............
<?php
$hostname = '192.168.10.17';
$username = 'root';
$password = 'asdasd';
$db = mysql_connect($hostname, $username, $password)
or die('connect to database failed');
mysql_set_charset('utf8');
mysql_select_db('DB')
or die('db not found');
$query = 'SELECT User,Type,SUM(Quantity) FROM `Log` GROUP BY User,Type';
$result = mysql_query($query) or die(mysql_error() ."<br/>". $query);
$table = "<table border=0 width=50% align=center>\n";
while ($row = mysql_fetch_assoc($result))
{
$table .= "<tr>\n";
$table .= "<td>".$row['User']."</td>\n";
$table .= "<td>".$row['Type']."</td>\n";
$table .= "<td>".$row['SUM(Quantity)']."</td>\n";
$table .= "</tr>\n";
}
$table .= "</table>\n";
echo $table;
mysql_close($db);
?>
выглядит так:
Сейчас буду играться с полем Time...............
Спустя 23 часа, 51 минута, 18 секунд (17.07.2012 - 17:06) exonix написал(а):
а вот такой вопрос:
у меня поле Time "07/16/2012 11:17:36"
а как мне сделать, чтобы обрабатывалось только значение даты "07/16/2012", а время "11:17:36" игнорировалось?
Потому что когда я пишу:
мне ничего не возвращается...
И если поставить Time="07/16/2012 *" тоже... или там нужно использовать другой знак, который указывает на любые знаки после...
Мне именно в базе нужно, чтобы было со временем, а при обработке php - только дата.
у меня поле Time "07/16/2012 11:17:36"
а как мне сделать, чтобы обрабатывалось только значение даты "07/16/2012", а время "11:17:36" игнорировалось?
Потому что когда я пишу:
$query = 'SELECT User,Type,SUM(Quantity),Time FROM `Log` WHERE Time="07/16/2012" GROUP BY User,Type';
мне ничего не возвращается...
И если поставить Time="07/16/2012 *" тоже... или там нужно использовать другой знак, который указывает на любые знаки после...
Мне именно в базе нужно, чтобы было со временем, а при обработке php - только дата.
Спустя 1 час, 33 минуты, 5 секунд (17.07.2012 - 18:39) sergeiss написал(а):
Используй функцию DATE() для извлечения только даты, без времени. И еще - лучше не используй для имен колонок слова типа TIME и другие, которые могут совпасть с именами функций или зарезервированных слов.
А если уж используешь такие имена, то тогда заключай их в "обратные кавычки": `time` - этот символ в английской раскладке находится на той же клавише, где и русская буква Ё.
А если уж используешь такие имена, то тогда заключай их в "обратные кавычки": `time` - этот символ в английской раскладке находится на той же клавише, где и русская буква Ё.
Спустя 17 часов, 55 минут, 35 секунд (18.07.2012 - 12:34) exonix написал(а):
сам не осилил. мне помогли коллеги (решился у них спросить):
Единственное, если выводить поле Time - то выводится со временем.
На будущее учту, о названии полей.
$query = 'SELECT User,Type,SUM(Quantity) FROM `Log` WHERE Time LIKE "07/16/2012%" GROUP BY User,Type';
Единственное, если выводить поле Time - то выводится со временем.
На будущее учту, о названии полей.
Спустя 28 минут, 50 секунд (18.07.2012 - 13:03) sergeiss написал(а):
WHERE DATE( `time` ) = '07/16/2012'
Единственное примечание - если таблица большая, то надо озабоиться созданием правильного индекса. Чтобы индесировать именно то, что написано, а не просто по полю time.