SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 06.03.2008 04:40:11

Ligalize
Завсегдатай
Зарегистрирован: 06.03.2008
Сообщений: 30

помогите составить запрос

народ, я чайник, умею тока if писать, но я учусь! ))
помогите запрос составить плииз!!!

есть таблица в которой столбец users в нем записи типа
1
1
5
2
1
3
3
1

надо посчитать сколько раз каждая строка повторяется и вывести 20 самых частых...

заранее спасибо!


я чайник, не ругайте сильно! )

Неактивен

 

#2 06.03.2008 06:11:52

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: помогите составить запрос

Не понял что именно нужно выбрать.
Если нужно выбрать 20 наиболее повторяющихся значений столбца users, то
SELECT users FROM table_name GROUP BY users ORDER BY count(*) DESC LIMIT 20;
Если вывести значения вместе с количеством повторений,то
SELECT count(*),users FROM table_name GROUP BY users ORDER BY 1 DESC LIMIT 20;

Если нужно выбрать полностью те строки, у которых значение столбца users входит в 20ку наиболее повторяющихся, то
SELECT t.* FROM test_table t, (SELECT users FROM test_table GROUP BY users ORDER BY count(*) DESC LIMIT 20) t1 WHERE t.users=t1.users;

Отредактированно vasya (06.03.2008 06:26:09)

Неактивен

 

#3 06.03.2008 17:20:18

Ligalize
Завсегдатай
Зарегистрирован: 06.03.2008
Сообщений: 30

Re: помогите составить запрос

спб бро!


я чайник, не ругайте сильно! )

Неактивен

 

#4 06.03.2008 17:22:42

Ligalize
Завсегдатай
Зарегистрирован: 06.03.2008
Сообщений: 30

Re: помогите составить запрос

а как вывести кол-во повторений напротив?

<?php

$load2 = "SELECT user_id, COUNT(*) AS cnt FROM buy GROUP BY user_id ORDER BY cnt DESC LIMIT 20";
$result2 = mysql_query($load2);

while ($a_row = mysql_fetch_array($result2)){
print $a_row[user_id]."<br>";
}

?>


я чайник, не ругайте сильно! )

Неактивен

 

#5 06.03.2008 18:29:08

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: помогите составить запрос

Код:

print $a_row['user_id'] . " : " . $a_row['cnt'] ."<br>";

Неактивен

 

#6 08.03.2008 18:35:01

Ligalize
Завсегдатай
Зарегистрирован: 06.03.2008
Сообщений: 30

Re: помогите составить запрос

сбп! с прошлым запросом вы мне очень помогли! надеюсь еще раз выручите!

datetime в формате date("Y-m-d H:i:s");

SELECT * FROM buy WHERE CURDATE() - INTERVAL 1 DAY > datetime

должен выводить записи за сутки (за прошедшие 24 с текущего момента), а выводит вообе бредятину!
помогите решить проблему!


я чайник, не ругайте сильно! )

Неактивен

 

#7 08.03.2008 19:29:45

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: помогите составить запрос

Ligalize написал:

должен выводить записи за сутки (за прошедшие 24 с текущего момента), а выводит вообе бредятину!
помогите решить проблему!

Для этого Вам нужно использовать в запросе знак <

Неактивен

 

#8 08.03.2008 23:15:38

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: помогите составить запрос

Знак меньше и NOW() вместо CURDATE(), чтобы за 24 часа

Неактивен

 

#9 26.03.2008 05:33:43

Ligalize
Завсегдатай
Зарегистрирован: 06.03.2008
Сообщений: 30

Re: помогите составить запрос

Хай! эт снова я! )) очень помогли ваши запросы, но вот столкнулся с очередной траблой... (

как вывести записи за последнюю минуту? заранее спб!
дата хранится в виде 0000-00-00 00:00:00
я хочу сделать скрипт, который по крону будет проверять каждую минуту и если настоящее время будет совбадать с базой, то будет производиться запись в базу...

Отредактированно Ligalize (26.03.2008 07:09:04)


я чайник, не ругайте сильно! )

Неактивен

 

#10 26.03.2008 10:25:38

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: помогите составить запрос

SELECT * FROM tbl WHERE d > now() - INTERVAL 1 MINUTE;

Неактивен

 

#11 26.03.2008 13:30:02

Ligalize
Завсегдатай
Зарегистрирован: 06.03.2008
Сообщений: 30

Re: помогите составить запрос

Огромное спб за помощь! Еще вопросик, если я поставлю на крон этот запрос, то запись будет прочитана 1 раз? не будет ли пропусков записей? вопрос конечно дилетантский, ну так и раздел для начинающих!


я чайник, не ругайте сильно! )

Неактивен

 

#12 26.03.2008 13:46:32

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: помогите составить запрос

cron вообще говоря не ровно раз в минуту, а может зависеть от нагруженности системы (еще учтите ситуацию, когда кто-то перезапустил или остановил cron). Рекомендую Вам завести поле used bool default 0 и выставлять его в 1 для всех использованных по назначению записей. Тогда не будет пропусков и повторов, а условие на 1 минуту не требуется.

Неактивен

 

#13 26.03.2008 20:23:58

Ligalize
Завсегдатай
Зарегистрирован: 06.03.2008
Сообщений: 30

Re: помогите составить запрос

я понял! огромное спб за помощь!


я чайник, не ругайте сильно! )

Неактивен

 

#14 26.03.2008 20:31:05

Ligalize
Завсегдатай
Зарегистрирован: 06.03.2008
Сообщений: 30

Re: помогите составить запрос

хм у меня при попытке создать bool создается tinyint :\


я чайник, не ругайте сильно! )

Неактивен

 

#15 26.03.2008 20:35:08

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: помогите составить запрос

Ligalize написал:

хм у меня при попытке создать bool создается tinyint :\

да, это правильно, так и должно быть. Типа bool в MySQL нет, для удобства это синоним tinyint. Занимает он один байт, но выравнивание чаще всего работает так, что все равно 4 байта в памяти занимает. На диске - зависит от механизма хранения.

Неактивен

 

#16 27.03.2008 06:03:51

Ligalize
Завсегдатай
Зарегистрирован: 06.03.2008
Сообщений: 30

Re: помогите составить запрос

еще раз спб за разъеснения, очень рад что нашел такой крутой форум!


я чайник, не ругайте сильно! )

Неактивен

 

#17 27.03.2008 06:44:00

Ligalize
Завсегдатай
Зарегистрирован: 06.03.2008
Сообщений: 30

Re: помогите составить запрос

еще вопросик если можно smile)))
мож я еще не проснулся, но никак немогу догнать как сделать запрос чтобы вставить запись со временем больше на 1 час чес сейчас!! ) время и дата хранятся в datetime


я чайник, не ругайте сильно! )

Неактивен

 

#18 27.03.2008 06:54:11

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: помогите составить запрос

NOW() + INTERVAL 1 HOUR

Неактивен

 

#19 27.03.2008 13:25:38

Ligalize
Завсегдатай
Зарегистрирован: 06.03.2008
Сообщений: 30

Re: помогите составить запрос

спасибо! еще вопросик! у меня никак не подставляется переменная $type_name_out в запросе
вместо нее подставляется ряд имен, имена правильные! но почему-то эта часть запроса $type_name_out=$prcl просто игнорируется...

UPDATE manufacture set money=$compmoney, $type_name_out=$prcl WHERE id=$id_comp LIMIT 1


я чайник, не ругайте сильно! )

Неактивен

 

#20 27.03.2008 13:32:57

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: помогите составить запрос

приведите более широкий контекст запроса, а именно полную строчку из PHP

Неактивен

 

#21 27.03.2008 13:37:02

Ligalize
Завсегдатай
Зарегистрирован: 06.03.2008
Сообщений: 30

Re: помогите составить запрос

$up_comp = "UPDATE manufacture set money=$compmoney, $type_name_out=$prcl WHERE id=$id_comp LIMIT 1";
$up_user = "UPDATE users set money=$usermoney WHERE id=$user_id LIMIT 1";
$up_used = "UPDATE job SET used='1' WHERE id=$zint LIMIT 1";

if (mysql_query($up_comp) and mysql_query($up_user) and mysql_query($up_used)){
print "<p><b>ok</b></p>";}

Отредактированно Ligalize (27.03.2008 13:37:44)


я чайник, не ругайте сильно! )

Неактивен

 

#22 27.03.2008 13:38:36

Ligalize
Завсегдатай
Зарегистрирован: 06.03.2008
Сообщений: 30

Re: помогите составить запрос

все записывается, только то о чем я выше рассказывал игнорируется


я чайник, не ругайте сильно! )

Неактивен

 

#23 27.03.2008 13:46:04

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: помогите составить запрос

Добавьте echo $up_comp;
и напишите какой запрос сформирован

И Вам не помешает
else { die(mysql_error()); } // не к этому вопросу, но на всякий случай

Неактивен

 

#24 27.03.2008 13:52:07

Ligalize
Завсегдатай
Зарегистрирован: 06.03.2008
Сообщений: 30

Re: помогите составить запрос

UPDATE manufacture set money=9400, out_lamp=12.2 WHERE id=7 LIMIT 1
но как было в базе 12 ровно, так и осталось!
число хранится в int(11)

Отредактированно Ligalize (27.03.2008 13:54:27)


я чайник, не ругайте сильно! )

Неактивен

 

#25 27.03.2008 14:19:02

Ligalize
Завсегдатай
Зарегистрирован: 06.03.2008
Сообщений: 30

Re: помогите составить запрос

хе-хе, получается сам на свой вопрос и ответил! а в чем тогда лучше хранить не целые числа?


я чайник, не ругайте сильно! )

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson