Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
9 / 9 / 0
Регистрация: 08.04.2013
Сообщений: 124

Имя в сообщениях

26.05.2013, 12:53. Показов 1395. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет
подскажите как сделать чтобы в сообщениях писалось имя а не логин
это php самих сообщений
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$sel = "SELECT * FROM `messages` WHERE poluchatel='$login'  ORDER BY id DESC LIMIT ".$start.", ".$num_elements;
            $query = mysql_query($sel);
            if ($query){    //если число строк $query больше нуля то выводим таблицу
                ?>
                
                <?php
                while($res = mysql_fetch_array($query))
                
                {  //вывод сообщений
                    echo '<div id="vhods_messages"><div id="vhods_messages2"></div><div id="vhods_messages3"><div id="vhods_messages_shapka"><tr><td>'.$sel2['name'].'</td> ';
                    echo '<td>'.$res['date'].'</td> <br></div>';
                    echo '<center><td>'.$res['text'].'</td> <br></center>';
                    $res = printf (" <div id='dell_messages1'><a id='dell_messages' href='../drop_post.php?id=%s'>Удалить [X]</a></div> </div></div>",$res['id']); 
                    
                }
бд сообщений
SQL
1
2
3
4
5
6
7
8
CREATE TABLE IF NOT EXISTS `messages` (
  `id` INT(9) NOT NULL AUTO_INCREMENT,
  `author` VARCHAR(15) NOT NULL DEFAULT '',
  `poluchatel` VARCHAR(15) NOT NULL DEFAULT '',
  `date` DATE NOT NULL DEFAULT '0000-00-00',
  `text` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=41 ;
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.05.2013, 12:53
Ответы с готовыми решениями:

Как в билдере получить с сервера (MySQL 5.1, имя базы "skola", имя table "info") имя столбцов и имя строк
Доброва времены суток Как в билдере получить с сервера (MySQL 5.1, имя базы &quot;skola&quot;, имя table &quot;info&quot;) имя столбцов и...

Дано полное имя файла, т.е путь к файлу, имя и расширение. Выделить из строки только имя первого католога
Помогите пожалуйста!!! Залание: Дано полное имя файла, т.е путь к файлу, имя и расширение. Выделить из строки только имя первого...

Не понятно в сообщениях
У нас есть чат, который работает посредством чтения/записи в него тех самых сообщений, которые выводятся через iframe с автообновлением....

17
 Аватар для 24web
12 / 12 / 1
Регистрация: 22.05.2013
Сообщений: 82
26.05.2013, 23:35
$sel2['name'] - это что такое
0
9 / 9 / 0
Регистрация: 08.04.2013
Сообщений: 124
26.05.2013, 23:36  [ТС]
это я пытался сделать там $res["login"]
0
65 / 65 / 18
Регистрация: 10.03.2013
Сообщений: 188
26.05.2013, 23:41
просто у вас в таблице нет колонки `login`
А если создадите, то обращатся к ней $res['login']
0
9 / 9 / 0
Регистрация: 08.04.2013
Сообщений: 124
26.05.2013, 23:43  [ТС]
логин берется из таблици users
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE TABLE IF NOT EXISTS `users` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `login` VARCHAR(15) NOT NULL DEFAULT '',
  `password` VARCHAR(255) NOT NULL DEFAULT '',
  `rating` INT(10) UNSIGNED NOT NULL,
  `avatar` VARCHAR(255) NOT NULL DEFAULT '',
  `poster` VARCHAR(255) NOT NULL DEFAULT '',
  `email` VARCHAR(255) NOT NULL DEFAULT '',
  `activation` INT(1) NOT NULL DEFAULT '0',
  `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `name` VARCHAR(25) NOT NULL DEFAULT '',
  `lastname` VARCHAR(25) NOT NULL DEFAULT '',
  `pol` tinyint(1) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=61 ;
0
65 / 65 / 18
Регистрация: 10.03.2013
Сообщений: 188
26.05.2013, 23:44
В вашем запросе обращение идет к таблице `messages`
0
9 / 9 / 0
Регистрация: 08.04.2013
Сообщений: 124
26.05.2013, 23:49  [ТС]
несовсем понимаю
логин у меня отображается нормально
как я понимаю в таблице messages надо сделать name и lastname ??
или нет так понял?
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 830
Регистрация: 09.09.2009
Сообщений: 29,554
26.05.2013, 23:52
join таблиц по логину (предположительно)
0
65 / 65 / 18
Регистрация: 10.03.2013
Сообщений: 188
26.05.2013, 23:56
Точно не уверен, но может запрос нужно сделать так
PHP
1
$sel = "SELECT * FROM `messages`,`users` WHERE messages.poluchatel='$login' AND users.login ='$login' ORDER BY messages.id DESC LIMIT ".$start.", ".$num_elements;
Сам с этим не разу не сталкиволся
0
9 / 9 / 0
Регистрация: 08.04.2013
Сообщений: 124
27.05.2013, 00:03  [ТС]
что то типо этого?
SQL
1
2
3
4
5
6
7
8
9
10
        $res2 = $db->PREPARE('
            SELECT * 
                FROM `messages` `b`
                        LEFT JOIN
                            `users` `u`
                        ON
                            `b`.`id` = `u`.`id`
                WHERE
                    `author_id` = ?
            ');
как то так???
всегда путаюсь с joinами

Добавлено через 15 секунд
сима щас попробую

Добавлено через 5 минут
Сима частично подошло
у меня это входящие сообщения
и на всех сообщения входящих мое имя а не имя отправителя
0
65 / 65 / 18
Регистрация: 10.03.2013
Сообщений: 188
27.05.2013, 00:22
Не факт но может
PHP
1
$sel = "SELECT * FROM `messages`,`users` WHERE messages.poluchatel='$login' ORDER BY messages.id DESC LIMIT ".$start.", ".$num_elements;
0
9 / 9 / 0
Регистрация: 08.04.2013
Сообщений: 124
27.05.2013, 00:37  [ТС]
где-то недочет
пишет в поле (имя отправителя) все имена из таблицы users
а в (сообщении) пишет последние сообщение
0
9 / 9 / 0
Регистрация: 08.04.2013
Сообщений: 124
28.05.2013, 21:07  [ТС]
Sima175, есть еще варианты???
0
65 / 65 / 18
Регистрация: 10.03.2013
Сообщений: 188
28.05.2013, 22:06
PHP
1
$sel = "SELECT * FROM `messages`,`users` WHERE messages.poluchatel='$login' AND messages.poluchatel=users.login ORDER BY messages.id DESC LIMIT ".$start.", ".$num_elements;
1
9 / 9 / 0
Регистрация: 08.04.2013
Сообщений: 124
28.05.2013, 22:14  [ТС]
Sima175, пишет логин получателя а не отправителя
что-то где то не то
что еще можно???
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
28.05.2013, 22:59
Цитата Сообщение от romanoid Посмотреть сообщение
WHERE
* * * * * * * * * *`author_id` = ?
вообще, такой код нежелателен - т.к. не указана таблица (и, по идее, должен выдавать ошибку запроса).
Цитата Сообщение от romanoid Посмотреть сообщение
на всех сообщения входящих мое имя а не имя отправителя
А какое должно быть еще? Зачем в условии author_id, если тебе необходимо проверять получателя, а не отправителя? Если я конечно правильно понял.

Кликните здесь для просмотра всего текста
В общем виде простые джойны можно "объяснить" как-то так

SQL
1
2
3
4
5
6
7
8
9
10
11
SELECT 
    *
FROM
    `первая_таблица` `алиас_первой_таблицы`
LEFT JOIN
    `вторая_таблица` `алиас_второй страницы`
ON
    `алиас_первой_таблицы`.`поле` = `алиас_второй таблицы`.`поле`
WHERE
    `алиас_нужной_таблицы`.`поле` = 'нужное значение'
......
Конечно, алиасы необязательны - это, своего рода, "костыль" - чтобы мускул не матерился на одинаковые имена Ну и для удобства (куда проще писать msg вместо message, к примеру) - но, в принципе, можно обойтись и без них..

Если непонятна такая запись с алиасами, можно использовать ключевое слово AS
SQL
1
2
3
4
5
6
7
8
9
10
11
SELECT 
    *
FROM
    `первая_таблица` AS `алиас_первой_таблицы`
LEFT JOIN
    `вторая_таблица` AS `алиас_второй страницы`
ON
    `алиас_первой_таблицы`.`поле` = `алиас_второй таблицы`.`поле`
WHERE
    `алиас_нужной_таблицы`.`поле` = 'нужное значение'
......
Помимо ON, при поиске по одинаковым названиям полей различных таблиц, можно использовать USING(`имя_одинакового_поля`)
Также, при использовании LEFT JOIN берутся данные из первой таблицы, RIGHT JOIN - из второй таблицы. LEFT/RIGHT JOIN - это, на самом деле LEFT/RIGHT OUTER JOIN, просто слово OUTER можно опустить. OUTER - это внешнее объединение. Т.е., LEFT JOIN-запрос вернет записи из первой таблицы, а также записи из второй таблицы, которые соответствуют условию в ON (или USING). RIGHT JOIN - обратное действие (т.е., можно сказать, что мы поменяли местами таблицы в FROM и JOIN).
Наглядно:
SQL
mysql> USE `test`;
Reading TABLE information FOR completion OF TABLE AND COLUMN names
You can turn off this feature TO GET a quicker startup WITH -A
 
DATABASE changed
mysql> SHOW TABLES;
+----------------+
| Tables_in_test |
+----------------+
| FIRST          |
| SECOND         |
+----------------+
2 ROWS IN SET (0.00 sec)
 
mysql> SHOW COLUMNS FROM `first`;
+----------+--------------+------+-----+---------+----------------+
| FIELD    | TYPE         | NULL | KEY | DEFAULT | Extra          |
+----------+--------------+------+-----+---------+----------------+
| first_id | INT(11)      | NO   | PRI | NULL    | AUTO_INCREMENT |
| f_1      | VARCHAR(255) | NO   |     | NULL    |                |
| f_2      | VARCHAR(255) | NO   |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
3 ROWS IN SET (0.01 sec)
 
mysql> SHOW COLUMNS FROM `second`;
+------------+--------------+------+-----+---------+----------------+
| FIELD      | TYPE         | NULL | KEY | DEFAULT | Extra          |
+------------+--------------+------+-----+---------+----------------+
| second_id  | INT(11)      | NO   | PRI | NULL    | AUTO_INCREMENT |
| some_value | VARCHAR(255) | NO   |     | NULL    |                |
| first_id   | INT(10)      | NO   | MUL | 0       |                |
+------------+--------------+------+-----+---------+----------------+
3 ROWS IN SET (0.00 sec)
mysql> SELECT * FROM `first`;
+----------+------------------------------+------------------------------+
| first_id | f_1                          | f_2                          |
+----------+------------------------------+------------------------------+
|        1 | TABLE FIRST record 1 FIELD 1 | TABLE FIRST record 1 FIELD 2 |
|        2 | TABLE FIRST record 2 FIELD 1 | TABLE FIRST record 2 FIELD 2 |
|        3 | TABLE FIRST record 3 FIELD 1 | TABLE FIRST record 3 FIELD 2 |
|        4 | TABLE FIRST record 4 FIELD 1 | TABLE FIRST record 4 FIELD 2 |
|        5 | TABLE FIRST record 5 FIELD 1 | TABLE FIRST record 5 FIELD 2 |
+----------+------------------------------+------------------------------+
5 ROWS IN SET (0.00 sec)
 
mysql> SELECT * FROM `second`;
+-----------+-----------------------+----------+
| second_id | some_value            | first_id |
+-----------+-----------------------+----------+
|         1 | TABLE SECOND record 1 |        2 |
|         2 | TABLE SECOND record 2 |        1 |
|         3 | TABLE SECOND record 3 |        0 |
|         4 | TABLE SECOND record 4 |        3 |
|         5 | TABLE SECOND record 5 |        1 |
+-----------+-----------------------+----------+
5 ROWS IN SET (0.00 sec)
LEFT JOIN
SQL
mysql> SELECT * FROM `first` LEFT JOIN `second` ON `first`.`first_id` = `second`.`first_id` WHERE `first`.`first_id` >= 2;
+----------+------------------------------+------------------------------+-----------+-----------------------+----------+
| first_id | f_1                          | f_2                          | second_id | some_value            | first_id |
+----------+------------------------------+------------------------------+-----------+-----------------------+----------+
|        2 | TABLE FIRST record 2 FIELD 1 | TABLE FIRST record 2 FIELD 2 |         1 | TABLE SECOND record 1 |        2 |
|        3 | TABLE FIRST record 3 FIELD 1 | TABLE FIRST record 3 FIELD 2 |         4 | TABLE SECOND record 4 |        3 |
|        4 | TABLE FIRST record 4 FIELD 1 | TABLE FIRST record 4 FIELD 2 |      NULL | NULL                  |     NULL |
|        5 | TABLE FIRST record 5 FIELD 1 | TABLE FIRST record 5 FIELD 2 |      NULL | NULL                  |     NULL |
+----------+------------------------------+------------------------------+-----------+-----------------------+----------+
4 ROWS IN SET (0.00 sec)
RIGHT JOIN

SQL
mysql> SELECT * FROM `first` RIGHT JOIN `second` ON `first`.`first_id` = `second`.`first_id` WHERE `first`.`first_id` >= 2;
+----------+------------------------------+------------------------------+-----------+-----------------------+----------+
| first_id | f_1                          | f_2                          | second_id | some_value            | first_id |
+----------+------------------------------+------------------------------+-----------+-----------------------+----------+
|        2 | TABLE FIRST record 2 FIELD 1 | TABLE FIRST record 2 FIELD 2 |         1 | TABLE SECOND record 1 |        2 |
|        3 | TABLE FIRST record 3 FIELD 1 | TABLE FIRST record 3 FIELD 2 |         4 | TABLE SECOND record 4 |        3 |
+----------+------------------------------+------------------------------+-----------+-----------------------+----------+
2 ROWS IN SET (0.00 sec)
И тут уже эту разницу хорошо видно
А теперь тоже самое, но с "обратным" порядком
SQL
mysql> SELECT * FROM `second` LEFT JOIN `first` ON `first`.`first_id` = `second`.`first_id` WHERE `first`.`first_id` >= 2;
+-----------+-----------------------+----------+----------+------------------------------+------------------------------+
| second_id | some_value            | first_id | first_id | f_1                          | f_2                          |
+-----------+-----------------------+----------+----------+------------------------------+------------------------------+
|         1 | TABLE SECOND record 1 |        2 |        2 | TABLE FIRST record 2 FIELD 1 | TABLE FIRST record 2 FIELD 2 |
|         4 | TABLE SECOND record 4 |        3 |        3 | TABLE FIRST record 3 FIELD 1 | TABLE FIRST record 3 FIELD 2 |
+-----------+-----------------------+----------+----------+------------------------------+------------------------------+
2 ROWS IN SET (0.00 sec)
 
mysql> SELECT * FROM `second` RIGHT JOIN `first` ON `first`.`first_id` = `second`.`first_id` WHERE `first`.`first_id` >= 2;
+-----------+-----------------------+----------+----------+------------------------------+------------------------------+
| second_id | some_value            | first_id | first_id | f_1                          | f_2                          |
+-----------+-----------------------+----------+----------+------------------------------+------------------------------+
|         1 | TABLE SECOND record 1 |        2 |        2 | TABLE FIRST record 2 FIELD 1 | TABLE FIRST record 2 FIELD 2 |
|         4 | TABLE SECOND record 4 |        3 |        3 | TABLE FIRST record 3 FIELD 1 | TABLE FIRST record 3 FIELD 2 |
|      NULL | NULL                  |     NULL |        4 | TABLE FIRST record 4 FIELD 1 | TABLE FIRST record 4 FIELD 2 |
|      NULL | NULL                  |     NULL |        5 | TABLE FIRST record 5 FIELD 1 | TABLE FIRST record 5 FIELD 2 |
+-----------+-----------------------+----------+----------+------------------------------+------------------------------+
4 ROWS IN SET (0.00 sec)
т.е. LEFT/RIGHT в JOIN - это нечто подобное математического "от перестановки слагаемых сумма не изменятся" Но разница, все же, есть..
Словами можно объяснить LEFT/RIGHT JOIN как-то так: "выбрать все из первой/второй таблицы, и, если это условие выполняется и для второй/первой таблицы - то подцепить данные и оттуда".
А вот INNER JOIN, в отличии от них, "суров"
SQL
1
2
3
4
5
6
7
8
9
10
mysql> SELECT * FROM `first` INNER JOIN `second` ON `first`.`first_id` = `second`.`first_id`;
+----------+------------------------------+------------------------------+-----------+-----------------------+----------+
| first_id | f_1                          | f_2                          | second_id | some_value            | first_id |
+----------+------------------------------+------------------------------+-----------+-----------------------+----------+
|        2 | TABLE FIRST record 2 FIELD 1 | TABLE FIRST record 2 FIELD 2 |         1 | TABLE SECOND record 1 |        2 |
|        1 | TABLE FIRST record 1 FIELD 1 | TABLE FIRST record 1 FIELD 2 |         2 | TABLE SECOND record 2 |        1 |
|        3 | TABLE FIRST record 3 FIELD 1 | TABLE FIRST record 3 FIELD 2 |         4 | TABLE SECOND record 4 |        3 |
|        1 | TABLE FIRST record 1 FIELD 1 | TABLE FIRST record 1 FIELD 2 |         5 | TABLE SECOND record 5 |        1 |
+----------+------------------------------+------------------------------+-----------+-----------------------+----------+
4 ROWS IN SET (0.01 sec)
Т.е., "выбрать все из первой/второй таблицы, только если это условие выполняется для обеих таблиц"

Вроде не ошибся нигде, если что, поправят, думаю..
2
65 / 65 / 18
Регистрация: 10.03.2013
Сообщений: 188
28.05.2013, 23:17
PHP
1
2
3
4
5
6
7
$sel = "SELECT *
FROM `messages` AS `msg`
LEFT JOIN `users` AS `usr`
ON `msg`.`poluchatel` = `usr`.`login`
WHERE `msg`.`poluchatel` = '$login'
ORDER BY msg.id 
DESC LIMIT ".$start.", ".$num_elements;
Надеюсь правильно запрос написал

Добавлено через 1 минуту
KOPOJI, Поправьте если не верно
0
9 / 9 / 0
Регистрация: 08.04.2013
Сообщений: 124
28.05.2013, 23:25  [ТС]
Sima175, спасибо большое ты написал до этого верно все, там немного иправить надо было

KOPOJI, дал наводку как надо
все получилось вот так
PHP
1
$sel = "SELECT * FROM `messages`,`users` WHERE messages.poluchatel='$login' AND messages.author=users.login ORDER BY messages.id DESC LIMIT ".$start.", ".$num_elements;
спасибо большое вам за помощь!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.05.2013, 23:25
Помогаю со студенческими работами здесь

Иконки в сообщениях
Вот например есть диалоги MessageBox и MessageDlg, откуда? из каких файлов берутся эти иконки в сообщениях?

Кнопки В Почтовых Сообщениях
Дело вот в чем - при добавлении кнопок в почтовое сообщение порой возникает execution security alert. Вопрос - как бы организовать...

Цензура в сообщениях (PHP)
Нужна программа цензуры, которая будет искать и заменять номера кредитных карт на звездочки, если в сообщениях есть число из 16 цифр, чтобы...

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

Оповещение о новых сообщениях
Здравствуйте, не могу сделать оповещение о новых сообщениях. Сам алгоритм не ясен. База данных: id | text | time_created |


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru