powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / select из 2х таблиц c функцией max()
1 сообщений из 1, страница 1 из 1
select из 2х таблиц c функцией max()
    #38644204
Pilsen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую еще раз

Есть 2 таблицы, где хранятся nameservers для доменов и связи nameserver <=> domain. Каждый домен идентифицируется по ID. Nameserver по имени (ns) и айди (nid).

Задача: имея ID домена (table_nameids.id) вытащить для него из таблицы table_names имя "ns",
а так же, из таблицы table_nameids, достать max(nid_ind) - число доменов на этом неймсервере. И всё это - 1 запросом.

nid_ind - это int значение от 1 до числа НСов для данного домена.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
mysql> show fields from table_names; (для просто хранятся названия nameserver-ов (ns) с их nID (nameserver ID))
+------------+-----------------+------+-----+---------+----------------+
| Field      | Type            | Null | Key | Default | Extra          |
+------------+-----------------+------+-----+---------+----------------+
| nid        | int(9) unsigned | NO   | PRI | NULL    | auto_increment |
| ns         | varchar(128)    | NO   | UNI | NULL    |                |
+------------+-----------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

mysql> show fields from table_nameids;
+---------+------------------+------+-----+---------+----------------+
| Field   | Type             | Null | Key | Default | Extra          |
+---------+------------------+------+-----+---------+----------------+
| tid     | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| id      | int(9) unsigned  | NO   | MUL | 0       |                |
| nid     | int(9) unsigned  | NO   | MUL | 0       |                |
| nid_ind | int(9) unsigned  | NO   |     | 0       |                |
| sig     | int(9) unsigned  | NO   |     | 0       |                |
+---------+------------------+------+-----+---------+----------------+

здесь:
 ID - айди домена, к которому эта запись относится
 nid - айди неймсервера из table_names
 nid_ind - пронумерованное от 1 до количества НСов поле. Если НСов 10, то будут записи с nid_ind от 1 до 10.

 суть в том, что для получения числа НСов, делается запрос 
select max(nid_ind) from table_nameids where nid=<nid>;



индексы вот такие:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
mysql> show index from table_names;
+------------+------------+------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table      | Non_unique | Key_name         | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+------------+------------+------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| table_names |          0 | PRIMARY          |            1 | nid         | A         |     3752315 |     NULL | NULL   |      | BTREE      |         |               |
| table_names |          0 | ns               |            1 | ns          | A         |     3752315 |     NULL | NULL   |      | BTREE      |         |               |
+------------+------------+------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
4 rows in set (0.03 sec)

mysql> show index from table_nameids;
+--------------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table        | Non_unique | Key_name          | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+--------------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| table_nameids |          0 | PRIMARY           |            1 | tid         | A         |   200744144 |     NULL | NULL   |      | BTREE      |         |               |
| table_nameids |          0 | index_nid_id      |            1 | nid         | A         |          18 |     NULL | NULL   |      | BTREE      |         |               |
| table_nameids |          0 | index_nid_id      |            2 | id          | A         |   200744144 |     NULL | NULL   |      | BTREE      |         |               |
| table_nameids |          1 | index_id          |            1 | id          | A         |   200744144 |     NULL | NULL   |      | BTREE      |         |               |
| table_nameids |          1 | index_nid_nid_ind |            1 | nid         | A         |      108217 |     NULL | NULL   |      | BTREE      |         |               |
| table_nameids |          1 | index_nid_nid_ind |            2 | nid_ind     | A         |   200744144 |     NULL | NULL   |      | BTREE      |         |               |
+--------------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+




Хочется сделать это 1 запросом.

Пока у меня запросы такие:
Код: sql
1.
select ns,table_names.nid from table_names,table_nameids where table_names.nid=table_nameids.nid and id=934;



что даёт мне
Код: sql
1.
2.
3.
4.
5.
6.
+----------------+-------+
| ns             | nid   |
+----------------+-------+
| ns58.1and1.com | 45769 |
| ns57.1and1.com | 45768 |
+----------------+-------+ 



далее, как мне тут посоветовали, делаю запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
mysql> select max(nid_ind) as nid_ind from table_nameids where nid in (45768,45769) group by nid;
+---------+
| nid_ind |
+---------+
|  768769 |
|  768766 |
+---------+
2 rows in set (0.01 sec) 



очень хочется избавиться от 2х запросов и делать всё одним (по крайней мере, на уровне скрипта).

логически, проблема в том, что мне нужно
- сначала достать айди НСа "nid" из table_nameids по заданному ID.
- потом достать из table_nameids значения max(nid_ind) для полученно nid И еще достать ns из таблицы table_names для тех же полученных "nid".

очень буду признателен за помощь.
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / select из 2х таблиц c функцией max()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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