powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как сделать это одним запросом
4 сообщений из 4, страница 1 из 1
Как сделать это одним запросом
    #37825136
Kaioh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Есть вот такая конструкция:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
		$sql = 'SELECT u.user_id, u.username, e.exclude_id
			FROM ' . USERS_TABLE . ' u, ' . DAP_LOG_EXCLUDES_TABLE . ' e
			WHERE u.user_id = e.user_id
				ORDER BY u.username_clean ASC';
		$result = $db->sql_query($sql);

		while ($row = $db->sql_fetchrow($result))
		{
			$exclude_id = $row['exclude_id'];

			$e_sql = 'SELECT username
				FROM ' . USERS_TABLE . "
				WHERE user_id = $exclude_id";
			$e_result = $db->sql_query($e_sql);
			$exclude_name = $db->sql_fetchfield('username');
			$db->sql_freeresult($e_result);

			$exclusion_options .= '<option value="' . $row['user_id'] . '">' . $row['username'] . ' &#8212; ' . $exclude_name . '</option>';
		}
		$db->sql_freeresult($result);


Этот код формирует вот такой список соответствий (см. картинку):
http://img829.imageshack.us/img829/3534/clip8.png

Таблица USERS_TABLE содержит все данные о существующих пользователях форума. Таблица DAP_LOG_EXCLUDES_TABLE содержит только 2 поля: user_id и exclude_id - то есть идентификаторы для каждой пары пользователей из списка.

Сначала из таблицы USERS_TABLE выбираются u.user_id и u.username, соответствующие находящемуся в таблице DAP_LOG_EXCLUDES_TABLE идентификатору e.user_id - это id и имя пользователей, отображаемых слева в списке. Условие u.user_id = e.user_id заодно проверяет существование пользователя в основной таблице USERS_TABLE. Затем для каждого найденного имени с помощью цикла while из таблицы USERS_TABLE выбирается имя пользователя-пары, отображаемого в списке справа.

Можно ли сделать то же самое, но при помощи одного SQL-запроса? Чтобы, когда в таблицах будет много данных, запросы не множились в геометрической прогрессии.
...
Рейтинг: 0 / 0
Как сделать это одним запросом
    #37825139
Kaioh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чтобы код в итоге принял вид:

Код: sql
1.
2.
3.
4.
5.
6.
7.
		"один SQL-запрос"

		while ($row = $db->sql_fetchrow($result))
		{
			$exclusion_options .= '<option value="' . $row['user_id'] . '">' . $row['username'] . ' &#8212; ' . $exclude_name . '</option>';
		}
		$db->sql_freeresult($result);
...
Рейтинг: 0 / 0
Как сделать это одним запросом
    #37825303
karioth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Примерно так
Код: sql
1.
2.
3.
4.
SELECT u.user_id, u.username, u2.user_id as excluded_user_id, u2.username as excluded_username 
			FROM ' . USERS_TABLE . ' u inner join ' . DAP_LOG_EXCLUDES_TABLE . ' e on u.user_id = e.user_id
                                    inner join ' . USERS_TABLE . ' u2 on e.exclude_id = u2.user_id
			ORDER BY u.username_clean ASC
...
Рейтинг: 0 / 0
Как сделать это одним запросом
    #37825412
Kaioh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
karioth ,
Большое спасибо, всё получилось.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как сделать это одним запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]