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

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

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

Author24 — интернет-сервис помощи студентам
Всем привет
подскажите как сделать чтобы в сообщениях писалось имя а не логин
это 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.05.2013, 12:53
Ответы с готовыми решениями:

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

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

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

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

17
12 / 12 / 1
Регистрация: 22.05.2013
Сообщений: 82
26.05.2013, 23:35 2
$sel2['name'] - это что такое
0
9 / 9 / 0
Регистрация: 08.04.2013
Сообщений: 124
26.05.2013, 23:36  [ТС] 3
это я пытался сделать там $res["login"]
0
65 / 65 / 18
Регистрация: 10.03.2013
Сообщений: 188
26.05.2013, 23:41 4
просто у вас в таблице нет колонки `login`
А если создадите, то обращатся к ней $res['login']
0
9 / 9 / 0
Регистрация: 08.04.2013
Сообщений: 124
26.05.2013, 23:43  [ТС] 5
логин берется из таблици 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 6
В вашем запросе обращение идет к таблице `messages`
0
9 / 9 / 0
Регистрация: 08.04.2013
Сообщений: 124
26.05.2013, 23:49  [ТС] 7
несовсем понимаю
логин у меня отображается нормально
как я понимаю в таблице messages надо сделать name и lastname ??
или нет так понял?
0
Эксперт по компьютерным сетямЭксперт NIX
13016 / 7407 / 801
Регистрация: 09.09.2009
Сообщений: 28,987
26.05.2013, 23:52 8
join таблиц по логину (предположительно)
0
65 / 65 / 18
Регистрация: 10.03.2013
Сообщений: 188
26.05.2013, 23:56 9
Точно не уверен, но может запрос нужно сделать так
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  [ТС] 10
что то типо этого?
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 11
Не факт но может
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  [ТС] 12
где-то недочет
пишет в поле (имя отправителя) все имена из таблицы users
а в (сообщении) пишет последние сообщение
0
9 / 9 / 0
Регистрация: 08.04.2013
Сообщений: 124
28.05.2013, 21:07  [ТС] 13
Sima175, есть еще варианты???
0
65 / 65 / 18
Регистрация: 10.03.2013
Сообщений: 188
28.05.2013, 22:06 14
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  [ТС] 15
Sima175, пишет логин получателя а не отправителя
что-то где то не то
что еще можно???
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
28.05.2013, 22:59 16
Цитата Сообщение от 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 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  [ТС] 18
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
28.05.2013, 23:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.05.2013, 23:25
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru