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

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

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

Вы не зашли.

#1 20.04.2012 21:58:02

in9emix
Завсегдатай
Зарегистрирован: 20.04.2012
Сообщений: 37

Вывод из бд только последние значение

Здравствуйте, сделал у себя на сайте систему регистрации и т.д...дошел до "Мои гости"...Всё работает, но если один и тот же человек посетил меня 10 раз за день, то из базы он и выводиться на странице 10 раз...например в 12 дня, в час, в два и т.д...а я бы хотел что б этот гость выводился только 1 раз из базы...то есть его последний визит...как вот сделать? ...Я уже голову сломал над этим...что только не пробовал...в mysql слабоват(

У меня на данный момент имеется всего 1 таблица users которая хранит в себе guest, id_guest, id_user и date где guest - это гость, id_user - это его id и date - это год,месяц,день: часы, минуты, секунды. Будьте добры, помогите пожалуйста мне именно с этими данными. Мне просто суть сейчас важна. А то у меня 1 таблица и я сейчас совсем растерялся,как мне быть(

Я даже пробовал просто сначало INSERT потом else и UPDATE где дата равно этому году, но все равно не выходит... Наверника так нельзя с mysql


Труднее всего заработать первый миллион долларов. Аристотель Онассис

Неактивен

 

#2 20.04.2012 22:49:05

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Вывод из бд только последние значение

Я так понял, есть таблица users, в которой имеются поля date и id_user.
Если нужно выбрать самое позднее посещение конкретного пользователя, то оно реализуется таким запросом:
SELECT max(`date`) FROM `users` WHERE `user_id`=ID_НУЖНОГО_ЮЗЕРА
или
SELECT `date` FROM `users` WHERE `user_id`=ID_НУЖНОГО_ЮЗЕРА ORDER BY `date` DESC LIMIT 1;


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 21.04.2012 07:25:26

in9emix
Завсегдатай
Зарегистрирован: 20.04.2012
Сообщений: 37

Re: Вывод из бд только последние значение

Я воспользовался 2ым вариантом, теперь гость выводиться только 1 раз, но если гостей было несколько, к примеру 6-7 то выведется только последний...а я хотел добиться именно то, что бы эти гости...если их 7 было за день...то что бы они выводились все...при этом только 1 раз...как в mail(e)...зашел юзер ко мне в гости в 2 часа дня, потом зашел в 8 вечера, то что визит был в 2 он удаляется, а тот что последний - остается и выводиться...как вот сделать...(


Труднее всего заработать первый миллион долларов. Аристотель Онассис

Неактивен

 

#4 21.04.2012 11:32:58

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Вывод из бд только последние значение

SELECT user_id, max(`date`) FROM `users` GROUP BY `user_id`

Если нужно только за последние сутки, то добавьте после FROM `users` соответствующее WHERE.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 21.04.2012 14:07:57

in9emix
Завсегдатай
Зарегистрирован: 20.04.2012
Сообщений: 37

Re: Вывод из бд только последние значение

Благодарю вас, вы мне очень помогли. Всё дело было в GROUP BY ... без него бы вообще никак...

Спасибо еще раз за подробный ответ! Успехов!!!


Труднее всего заработать первый миллион долларов. Аристотель Онассис

Неактивен

 

#6 27.04.2012 09:02:13

in9emix
Завсегдатай
Зарегистрирован: 20.04.2012
Сообщений: 37

Re: Вывод из бд только последние значение

Доброе время суток deadka, у меня к вам такой вопрос. Создал приватную переписку на своем сайте,в  БД в поле full_date `datetime` попадает дата и время, а в поле id `auto_increment` идет нумерация всех сообщений. Так вот есть дивный блок с классом text где отображается вся переписка, но есть одна проблема. Есть автор и есть получатель. Так вот авторы видят всегда свои сообщения вверху...потому что я сделал: ORDER BY full_date DESC но они же накапливаются...и выходит что получатель свои сообщения хоть и видит вверху, то полученные видит внизу, потому что они опусаются из за отправленных сообщений...( Соответственно в дивном блоке text появляется аватарка, логин и т.д... потому что я сделал 2 таблицы. 1ая для авторов, 2ая для получателя. И вот хоть я и поставил обоим таблицам по ORDER BY full_date DESC все равно выводяться они не так....Мне надо что б шла обычная привычная глазу переписка, что б в любом случае сообщения что полученные что отправленные появлялись вверху...а вся переписка уходила вниз...Я голову ломал долго...вот решил снова вам написать...
вы наверное спросите зачем 2 таблицы вывожу...к 1ой я сделал выборку из бд по автору....а к 2ой сделал выборку информации по получателю. Может я логически не так рассуждаю...я не знаю уже(...поэтому сюда вам написал. Не могу сообразить( Буду рад услышать от вас такой же подробный ответ.


Труднее всего заработать первый миллион долларов. Аристотель Онассис

Неактивен

 

#7 27.04.2012 09:13:11

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Вывод из бд только последние значение

Воспользуйтесь union. Идея такая:

Код:

mysql> create table t_5639_1(id int);
Query OK, 0 rows affected (0.03 sec)

mysql> create table t_5639_2(id int);
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t_5639_1 values(5),(1),(3);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> insert into t_5639_2 values(4),(2),(6);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from t_5639_1 union select * from t_5639_2;
+------+
| id   |
+------+
|    5 |
|    1 |
|    3 |
|    4 |
|    2 |
|    6 |
+------+
6 rows in set (0.00 sec)

mysql> select * from t_5639_1 union select * from t_5639_2 order by id;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
|    5 |
|    6 |
+------+
6 rows in set (0.00 sec)

mysql> select * from t_5639_1 union select * from t_5639_2 order by id desc;
+------+
| id   |
+------+
|    6 |
|    5 |
|    4 |
|    3 |
|    2 |
|    1 |
+------+
6 rows in set (0.00 sec)

Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#8 27.04.2012 10:02:49

in9emix
Завсегдатай
Зарегистрирован: 20.04.2012
Сообщений: 37

Re: Вывод из бд только последние значение

Я лучше переспрошу, что бы не напортачить. Как я понял, вы создали 2 таблицы в БД с названиямиt_5639_1 и t_5639_2

mysql> create table t_5639_1(id int);
Query OK, 0 rows affected (0.03 sec)

mysql> create table t_5639_2(id int);
Query OK, 0 rows affected (0.00 sec)

Далее вижу вы вносите в первую эти значения, но тут я теряюсь, смотрите... Потому что первый раз вижу запись такого рода: Records: 3  Duplicates: 0  Warnings: 0 что это? Или  это вы так назвали поля, куда потом летят значения (5),(1),(3); или же наоборот? ...Простите конечно, но ... расшифруйте так сказать ^^... Хочется понять очень.

mysql> insert into t_5639_1 values(5),(1),(3);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> insert into t_5639_2 values(4),(2),(6);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0


Труднее всего заработать первый миллион долларов. Аристотель Онассис

Неактивен

 

#9 27.04.2012 10:09:10

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Вывод из бд только последние значение

insert into t_5639_1 values(5),(1),(3); - это означает вставить в таблицу три строки. Три записи, при этом ни одного дубля и ни одного предупреждения - одним словом, все в порядке smile.

Что касается полей - в каждой из таблиц всего одно поле - id.

После вставки вот такие значения:

Код:

mysql> SELECT * FROM t_5639_1;
+------+
| id   |
+------+
|    5 |
|    1 |
|    3 |
+------+
3 rows in set (0.00 sec)

Код:

mysql> SELECT * FROM t_5639_2;
+------+
| id   |
+------+
|    4 |
|    2 |
|    6 |
+------+
3 rows in set (0.00 sec)

Следующий шаг - объединить таблицы через union:

Код:

mysql> SELECT * FROM t_5639_1 UNION SELECT * FROM t_5639_2;
+------+
| id   |
+------+
|    5 |
|    1 |
|    3 |
|    4 |
|    2 |
|    6 |
+------+
6 rows in set (0.00 sec)

Все бы ничего, но данные не отсортированы. Сортируем по убыванию:

Код:

mysql> SELECT * FROM t_5639_1 UNION SELECT * FROM t_5639_2 ORDER BY id DESC;
+------+
| id   |
+------+
|    6 |
|    5 |
|    4 |
|    3 |
|    2 |
|    1 |
+------+
6 rows in set (0.00 sec)

Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#10 27.04.2012 10:28:58

in9emix
Завсегдатай
Зарегистрирован: 20.04.2012
Сообщений: 37

Re: Вывод из бд только последние значение

Хм, вот оно в чем дело) Класс, не знал что можно соединять 2 таблицы. Это бы решило много моих проблем, которые встречались ранее... Теперь на сколько я понимаю, исчезнет проблема потому что на странице теперь у меня будет не 2 таблицы (которые мешали друг другу) а 1 в которой выборка будет вот таким образом: SELECT * FROM t_5639_1 UNION SELECT * FROM t_5639_2 ORDER BY id DESC; и все благодаря UNION. Правильно понял? Если так то пойду неприменно пробовать ^^


Труднее всего заработать первый миллион долларов. Аристотель Онассис

Неактивен

 

#11 27.04.2012 10:30:36

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Вывод из бд только последние значение

Да, правильно поняли. Чтобы каждый раз не соединять можно воспользоваться view.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#12 30.04.2012 15:05:45

in9emix
Завсегдатай
Зарегистрирован: 20.04.2012
Сообщений: 37

Re: Вывод из бд только последние значение

Как я понимаю это легкое соединение 2ух таблиц: SELECT * FROM t_5639_1 UNION SELECT * FROM t_5639_2 ORDER BY id DESC;
а что если у меня по сложней :SELECT * FROM messages WHERE poluchatel='Я' and author='Друг' ORDER BY id DESC UNION SELECT * FROM messages2 WHERE poluchatel='Наоборот уже Друг' and author='Наоборот уже Я' ORDER BY id DESC

Или же правильней будет так? SELECT * FROM messages  WHERE poluchatel='Я' and author='Друг' UNION SELECT * FROM messages2 WHERE poluchatel='Наоборот уже Друг' and author='Наоборот уже Я' ORDER BY id DESC , так же правельней? Будет ли запрос работать? Или он слишком сложен для UNION (а) ? Попробовал...что то не получается..


Труднее всего заработать первый миллион долларов. Аристотель Онассис

Неактивен

 

#13 02.05.2012 04:31:51

in9emix
Завсегдатай
Зарегистрирован: 20.04.2012
Сообщений: 37

Re: Вывод из бд только последние значение

deadka, жду ответа от вас


Труднее всего заработать первый миллион долларов. Аристотель Онассис

Неактивен

 

#14 02.05.2012 08:06:12

in9emix
Завсегдатай
Зарегистрирован: 20.04.2012
Сообщений: 37

Re: Вывод из бд только последние значение

Всё разобрался, почитал документацию.


Труднее всего заработать первый миллион долларов. Аристотель Онассис

Неактивен

 

#15 07.05.2012 21:25:13

-_RoJER_-(MAX)$
Участник
Откуда: Россия, Алт. край, Барнаул
Зарегистрирован: 05.05.2012
Сообщений: 4

Re: Вывод из бд только последние значение

Здравствуйте, сегодня столкнулся с такой проблемой: На готовящемся мной сайте начал писать блок админа, дошел до РЕДАКТИРОВАНИЯ. В форму текст из базы вытаскивает (но с некоторыми дефектами - не об этом сейчас) а из формы после редактирования выдает условие "не все поля заполнены". Помогите выяснить в чём ошибка, буду очень признателен.

if (isset($img) && isset($fam) && isset ($name) && isset ($otch) && isset ($date) && isset ($meta_d) && isset ($meta_k) && isset ($text))
{               
/*Здесь пишем что можно заносить информацию в базу*/
$result = mysql_query ("UPDATE biograf SET img='$img', fam='$fam', name='$name', otch='$otch', date='$date', meta_d='$meta_d', meta_k='$meta_k', description='$description', text='$text' WHERE id='$id'");

if ($result == 'true') {echo "<p class='text_title_green'>Биография успешно обновлена</p>";}
else {echo "<p class='pod_zag'>Биография не обновлена!</p>";}
}

else
{
echo "<p class='text_title_yelow'>Вы ввели не всю информацию в форму, потому биография вашего писателя не может быть обновлена</p>";
}

Неактивен

 

#16 07.05.2012 22:13:04

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Вывод из бд только последние значение

Вопрос, который Вы задали не имеет к MySQL отношения. Вопросы по php можно задать в соотв. разделе на webew.ru


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

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