Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 12
  1. #1
    Аватар для Elrmrnt-Kritik
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.11.2017
    Сообщений
    136
    Репутация:
    10 ±

    Создание индексов в базе данных (MySQL)

    Доброй ночи всем пользователям. В процессе изучения баз данных (MySQL) узнал о существовании индексов. Помимо того, что они упрощают поиск чего-либо в базе данных системе, они также удобны и в работе с базой данных пользователями. Правда столкнулся с небольшой проблемой, решение который не смог найти. Допустим, есть две таблицы в базе данных:

    Код:
    ==========ACCOUNTS==========
    		id				name
    		1				Oleg
    		2				Dima
    		3				Sasha
    		4				Serega
    		5				Timofey
    ==========BANLIST===========
    	id1		name1		id2		name2
    	1		Oleg	         5		Timofey
    	2		Dima		 5	   	Timofey
    	3		Sasha		 5		Timofey
    	4		Serega		 3		Sasha
    Моя задача научиться делать так, чтобы из мода не шли лишние запросы на "вписку" имени пользователя. Непосредственно столбцы name1 и name2 созданы лишь для удобства (мне) поиска пользователя (чтобы из базы данных было проще понять кто есть кто и можно было выполнять все необходимые операции без постоянного обращения к таблице accounts).

    На данный момент реализован индекс, который связывает `banlist`.`id1` с `accounts`.`id`, а также `banlist`.`id2` с `accounts`.`id`.

    Может немного сложно объяснил, но надеюсь на помощь)
    Извините, если не в том разделе создал тему...
    Последний раз редактировалось Elrmrnt-Kritik; 04.01.2018 в 02:33.

  2. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Ещё раз, что тебе нужно получить в результате? И какие данные есть изначально?
    Последний раз редактировалось DeimoS; 04.01.2018 в 04:44.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. #3
    Аватар для Elrmrnt-Kritik
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.11.2017
    Сообщений
    136
    Репутация:
    10 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Ещё раз, что тебе нужно получить в результате? И какие данные есть изначально?
    Ох, даже не знаю как объяснить...

    Имеются две таблицы: table1 и table2.

    В table1 прописаны уникальные значения ID пользователя. И на каждое уникальное значение ID в этой же таблице есть одно уникальное имя (name). Соответственно, если нужно что-то изменить конкретному человеку, я могу использовать как уникальный ключ поиска (после WHERE) и ID, и name (не беру во внимание сейчас, что для MySQL сравнение строк дольше).

    Далее, в table2 хранятся какие-то еще сведения о каждом человеке. Там есть один уникальный ключ (ID). И все операции выполнять с помощью него (SELECT/UPDATE/DELETE ... WHERE `id` = '...'). Если, например, по какой-либо причине ID у игрока может смениться (ну, кто его знает, зачем это может понадобиться ) в основной таблице (table1), то было бы здорово, если б ID в table2 также автоматически заменился. Для этого я создал индекс, который связывает `table1`.`id` и `table2`.`id`.
    Собственно, теперь к проблеме. Крайне неудобно работать с каким-либо человеком, не видя перед глазами ID. А выискивать сначала ID в table1 по известному имени, а затем еще в table2 искать этот ID - то же не самый приятный способ. Потому хотелось бы, чтобы в table2 тоже существовало поле name. Однако, оно не должно заполняться содержимым мною лично и сервером. Было бы здорово, чтобы поле `table2`.`name` заполнялось автоматически в зависимости от `table2`.`id`. По факту, я пытаюсь создать внутреннюю связь между `table1`.`id` и `table1`.`name`, а затем в table2 получить значение `table2`.`name` в зависимости от `table2`.`id`.

    Короче, как-то надо по связанному через индексы ID получить имя пользователя...

  4. #4
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Вообще не понял проблемы. Тебе в phpmyadmin неудобно что-ли смотреть? Или ты всё-же пытаешься запрос какой-то сделать?

  5. #5
    Аватар для Elrmrnt-Kritik
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.11.2017
    Сообщений
    136
    Репутация:
    10 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Тебе в phpmyadmin неудобно что-ли смотреть?
    Да. Я пытаюсь синхронизировать ID и name в одной таблицы, чтобы в другой по ID получить имя без всяких запросов (чтобы MySQL автоматически вставлял имя в поле).
    Последний раз редактировалось Elrmrnt-Kritik; 06.01.2018 в 01:07.

  6. #6
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Elrmrnt-Kritik Посмотреть сообщение
    Да. Я пытаюсь синхронизировать ID и name в одной таблицы, чтобы в другой по ID получить имя без всяких запросов (чтобы MySQL автоматически вставлял имя в поле).
    Любое дублирование данных в базе - это плохо.
    С помощью SQL можно создавать намного более сложные запросы, чем ты думаешь, посмотри по своей теме:
    - https://toster.ru/q/26573
    - https://ru.stackoverflow.com/questio...блиц-mysql

  7. Пользователь сказал cпасибо:
    Elrmrnt-Kritik (06.01.2018)
  8. #7
    Аватар для Kucklovod00
    Пользователь

    Статус
    Оффлайн
    Регистрация
    20.12.2017
    Сообщений
    36
    Репутация:
    0 ±
    Как я понял, это таблица accounts и accounts2. Что мешает создать строку (назовем это так) в обеих таблицах сразу?
    Если глупость, просьба проигнорировать.

  9. #8
    Аватар для Elrmrnt-Kritik
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.11.2017
    Сообщений
    136
    Репутация:
    10 ±
    Нет) Это все таблицы, где присутствуют записи о двух игроках. Такие как бан-лист (кто и кому выдал бан), логи, которые должны показываться на сайте (кто, кому и что передал) и все в этом роде. Я очень не хотел посылать запрос на внесение имени в таблицы такого типа. Хотел привлечь к этой работе систему.

    Пожалуй, воздержусь от удобства и последую словам ziggi, мол, дублирование не есть хорошо. Не стану это делать. Однако, все же интересно понять, можно ли заставить phpmyadmin саму вписать имя в зависимости от ID. Если в одной таблице у ID 5 имя "nik", то в другой, где вписывается ID 5 с сервера через INSERT, автоматически должно вписаться в поле name "nik".

    По идее нужно как-то создать внутренний индекс, связав ID и name, а потом как-то по нему получить имя в другой таблице...
    Последний раз редактировалось Elrmrnt-Kritik; 07.01.2018 в 02:26.

  10. #9
    Аватар для Geebrox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    Цитата Сообщение от Elrmrnt-Kritik Посмотреть сообщение
    Пожалуй, воздержусь от удобства и последую словам ziggi, мол, дублирование не есть хорошо. Не стану это делать. Однако, все же интересно понять, можно ли заставить phpmyadmin саму вписать имя в зависимости от ID. Если в одной таблице у ID 5 имя "nik", то в другой, где вписывается ID 5 с сервера через INSERT, автоматически должно вписаться в поле name "nik".
    PHP код:
    INSERT INTO `banlist` (`id_1`, `name_1`, `id_2`, `name_2`) VALUES ('ПЕРВЫЙ_ИД', (SELECT `nameFROM `accountsWHERE `accounts`.`id` = 'ПЕРВЫЙ_ИД'), 'ВТОРОЙ_ИД',  (SELECT `nameFROM `accountsWHERE `accounts`.`id` = 'ВТОРОЙ_ИД')) 
    Вот так можно (если я тебя правильно понял), нужно только знать id обеих игроков
    Последний раз редактировалось Geebrox; 07.01.2018 в 03:58.

  11. Пользователь сказал cпасибо:
    Elrmrnt-Kritik (07.01.2018)
  12. #10
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Elrmrnt-Kritik Посмотреть сообщение
    Пожалуй, воздержусь от удобства и последую словам ziggi, мол, дублирование не есть хорошо. Не стану это делать. Однако, все же интересно понять, можно ли заставить phpmyadmin саму вписать имя в зависимости от ID. Если в одной таблице у ID 5 имя "nik", то в другой, где вписывается ID 5 с сервера через INSERT, автоматически должно вписаться в поле name "nik".
    Автоматически - вряд ли (разве что через связи, но получится тупо). Можно связать таблицы и потом парой нажатий перейти к основному аккаунту, но для чего это нужно? Влезать в базу данных из phpMyAdmin чтоб что-то изменить - не самая лучшая идея. А если уж очень хочется, лучше научиться писать запросы и, собственно, составив один простой запрос и обратившись к двум таблицам, получить ник
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  13. Пользователь сказал cпасибо:
    Elrmrnt-Kritik (07.01.2018)
 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •