Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выборка из всей базы данных
 
 автор: Teleman   (07.07.2007 в 13:19)   письмо автору
 
 

Помогите пожалуйста есть таблица в базе данных форума в котором есть поля - №, Имя, сообщение, ну и всякие другие, значит что необходимо сделать, допустим Имя Teleman, Admin и прочие нужно посчитать кто сколько сделал сообщений, чтобы был список Teleman -145, Admin - 18, ну и так далее.
Заранее спасибо Teleman.

   
 
 автор: Trianon   (07.07.2007 в 13:27)   письмо автору
 
   для: Teleman   (07.07.2007 в 13:19)
 

как насчет хотя бы привести имена таблицы и полей, если уж не структуру таблицы полностью?
Потому что именем поля строчка Имя быть не может (как минимум в cp1251).


SELECT `имЯ`, COUNT(*) AS nn 
   FROM `таблица`
 GROUP BY `имЯ` 
 ORDER BY nn DESC

   
 
 автор: Teleman   (07.07.2007 в 13:39)   письмо автору
 
   для: Trianon   (07.07.2007 в 13:27)
 

Ну вот так выглядит всё мой творение помоему я здесь намутил много плохого.

/* Таблица MySQL, в которой хранятся данные */
$userstable = "post";

/* создать соединение */
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");
/* выбрать базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die(mysql_error());

/* составить запрос, который выберет всех клиентов */
$query = "SELECT 'username' COUNT(*) AS 'username' FROM $userstable GROUP BY 'username' ORDER BY 'username' DESC";
/* Выполнить запрос. Если произойдет ошибка - вывести ее. */
$res = mysql_query($query) or die(mysql_error());

/* Как много нашлось таких */
$number = mysql_num_rows($res);

/*Сколько всего*///////////////////////////////////////////////
echo "$number<br>";
/*конец *//////////////////////////////////////////////////////

while ($row=mysql_fetch_array($res)) {
// забирает текущее время в массив
$datenachalo = "270607";
//$timestamp = $row[dateline];

$timestamp = $datenachalo;
$date_time_array = getdate($timestamp);

$hours = $date_time_array['hours'];
$minutes = $date_time_array['minutes'];
$seconds = $date_time_array['seconds'];
$month = $date_time_array['mon'];
$day = $date_time_array['mday'];
$year = $date_time_array['year'];

$timestamp = mktime($hours,$minutes,$seconds,$month,$day,$year);
$itog = strftime('%F',$timestamp);
//$itog = strftime($timestamp);
echo "$itog";
echo "$row[username]<br>";

}
$ret = mktime( 0,0,0,6,27,2007 );
$timer = time($ret);
echo $ret;
//echo $timer;
/*Конец*/////////////////////////////////////////////////////////////
//$query1 = "SELECT * FROM $userstable where ";
/* Выполнить запрос. Если произойдет ошибка - вывести ее. */
//$res1 = mysql_query($query1) or die(mysql_error());

   
 
 автор: Trianon   (07.07.2007 в 13:47)   письмо автору
 
   для: Teleman   (07.07.2007 в 13:39)
 

1. пропустили запятую перед COUNT
2. дали выражению псевдоним, совпадающий и именем уже имеющегося столбика.
3. даже не попытались прочесть данные, которые вернул запрос.
применяйте цикл и функцию mysql_fetch_assoc()

   
 
 автор: Teleman   (07.07.2007 в 13:59)   письмо автору
 
   для: Trianon   (07.07.2007 в 13:47)
 

ну вот я тут переделал

ну так и ничего

$query = "SELECT username , COUNT(*) AS username FROM post GROUP BY username"; 
/* Выполнить запрос. Если произойдет ошибка - вывести ее. */ 
$res = mysql_query($query) or die(mysql_error()); 

/* Как много нашлось таких */ 
//$number = mysql_num_rows($res); 

/*Сколько всего*/////////////////////////////////////////////// 
echo "$number<br>";
/*конец *//////////////////////////////////////////////////////

while ($row=mysql_fetch_ascot($res)) {
echo $row[username];
}

Помогите составить это скрипт.
чтобы в столбец выбрал всех пользьвателей и через тире кол-во сообщений.

   
 
 автор: Trianon   (07.07.2007 в 14:04)   письмо автору
 
   для: Teleman   (07.07.2007 в 13:59)
 

2. Псевдоним должен отличаться от имени поля!

SELECT 
                   username 
   , COUNT(*) AS   kolichestvo 
  FROM post 
  GROUP BY username 
  ORDER BY kolichestvo DESC



ну и дело за малым:
echo $row[username] . " - "  . $row[kolichestvo] ."<br/>\r\n";

   
 
 автор: Teleman   (07.07.2007 в 14:23)   письмо автору
 
   для: Trianon   (07.07.2007 в 14:04)
 

Всё заработало, огромное спасибо.
А теперь можно всё это заставить выбирать с даты по дате из формы чтобы было но только там дата записана в timestamp. Я отблагодарю.

   
 
 автор: Trianon   (07.07.2007 в 14:40)   письмо автору
 
   для: Teleman   (07.07.2007 в 14:23)
 

Зависит от того, в каком виде даты от и до попадают в скрипт.
В общем случае - как-то так
"SELECT ...
....
WHERE dt BETWEEN $dt_ftom AND $dt_to"

   
 
 автор: Teleman   (07.07.2007 в 14:46)   письмо автору
 
   для: Trianon   (07.07.2007 в 14:40)
 

Дык а кто знает как она туда попадает в базе пишутся 1182863164 ну и все разные а как же узнать как они туда попадают.

   
 
 автор: Trianon   (07.07.2007 в 14:52)   письмо автору
 
   для: Teleman   (07.07.2007 в 14:46)
 

да не в базу - с ней всё ясно.
В скрипт как попадают. Из формы.
А из базы Вы их можете вытянуть как
SELECT FROM_UNIXTIME(поле) AS humandate FROM post

   
 
 автор: Teleman   (07.07.2007 в 15:22)   письмо автору
 
   для: Trianon   (07.07.2007 в 14:52)
 

ну из формы да полюбому можно хоть так хоть как, допустим 21.07.2007 абсолютно всё равно.

   
 
 автор: Trianon   (07.07.2007 в 17:15)   письмо автору
 
   для: Teleman   (07.07.2007 в 15:22)
 

вот если Вам действительно все равно - то пусть оно будет в таком формате:2007-07-21
тогда

$dt_from = mysql_escape_string($_REQUEST['dt_from']);
$dt_to = mysql_escape_string($_REQUEST['dt_to']);
$sql = "SELECT * 
  FROM post 
  WHERE dt BETWEEN 
             UNIX_TIMESTAMP('$dt_ftom') 
         AND UNIX_TIMESTAMP('$dt_to')+24*60*60-1"; 

   
 
 автор: Teleman   (07.07.2007 в 20:48)   письмо автору
 
   для: Trianon   (07.07.2007 в 17:15)
 

Я наверное надоел, но вот что я сделал, и пишет мне ошибку
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE dateline BETWEEN UNIX_TIMESTAMP('2007-06-01') AND UNIX_TIMESTAMP('2007-06-'

$dt_from = mysql_escape_string($_REQUEST['dt_from']);
$dt_to = mysql_escape_string($_REQUEST['dt_to']); 

/* Таблица MySQL, в которой хранятся данные */ 
$userstable = "post";
 
/* создать соединение */ 
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");
 
/* выбрать базу данных. Если произойдет ошибка - вывести ее */ 
mysql_select_db($dbName) or die(mysql_error());  

/* составить запрос, который выберет всех клиентов */ 
$query = "SELECT postid, username ,dateline ,
COUNT(*) AS kol FROM post as userfield GROUP BY username WHERE dateline BETWEEN UNIX_TIMESTAMP('$dt_from') AND UNIX_TIMESTAMP('$dt_to')+24*60*60-1 ORDER BY kol DESC"; 

   
 
 автор: Trianon   (07.07.2007 в 22:44)   письмо автору
 
   для: Teleman   (07.07.2007 в 20:48)
 

1. нарушен порядок элементов в запросе
сперва выржение WHERE а потом уже GROUP BY и в конце ORDER BY

2. Вводите дату согласно формата yyyy-mm-dd

   
 
 автор: Teleman   (07.07.2007 в 23:52)   письмо автору
 
   для: Trianon   (07.07.2007 в 22:44)
 

Напиши кошелек webmoney. Немного помогу в финансовом вопросе насколько могу.

   
 
 автор: Trianon   (08.07.2007 в 02:00)   письмо автору
 
   для: Teleman   (07.07.2007 в 23:52)
 

Если требуется дата в более привычном формате, то поможет такой код:
function es2eu_dt($d)
{
    list($d, $s1, $m, $s2, $y, $s3,$hh,$s4,$mm,$s5,$ss)
      = sscanf("$dt:00:00:00:00:00:00", "%d%c%d%c%d%c%d%c%d%c%d");
    if($y < 100) $y += (($y < 50)?2000:1900);
    return $s3 == ':'? sprintf("%04d-%02d-%02d",$y, $m, $d)
        : sprintf("%04d-%02d-%02d %02d:%02d:%02d", $y, $m, $d, $hh,$mm,$ss);
}
$dt_from = es2eu_dt($_REQUEST['dt_from']); 
$dt_to = es2eu_dt($_REQUEST['dt_to']);  


Даты будут восприниматься в формате 8.07.2007

Z787569541744

   
 
 автор: Teleman   (08.07.2007 в 08:07)   письмо автору
 
   для: Trianon   (08.07.2007 в 02:00)
 

Огромное спасибо, в принципе все эти заморочки уже не нужны главное то работает, а остальное пока не важно. Ну если какие вопросы будут то я обращусь. Немного там вам выслал. Ну сколько смог.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования