Показать сообщение отдельно
  #10 (permalink)  
Старый 15.05.2017, 20:44
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Не цитируйте мои комменты полностью, зачем?

Если ваша база для работы только с русским и английским, то выгоднее не
utf8_unicode_ci, а utf8_general_ci.

Чтобы был корректный вывод из базы, а не Гена, нужно указывать кодировку соединения сразу после соединения с базой:

mysql_query("SET NAMES utf8");

Естественно, также должна определятся и кодировка страниц. Если предполагается использование функций для работы с многобайтными строками, то можно сразу и для них определить кодировку

mb_internal_encoding("UTF-8");

$select = "SELECT * FROM sortable ORDER BY id ASC"; // select every element in the table in order by order column
//echo mysql_error();
$perform = mysql_query( $select ); //perform selection query
//echo mysql_error();
while( $array = @mysql_fetch_assoc( $perform ) ){...


Я уже писал, что это плохо и чревато последствиями, почему продолжается?

Сообщение от Niliya
Ответила на все вопросы
Нет. Я вам уже дважды пытался пояснить что требуется - что такое rank_name? Во-первых именование поля не понять о чем, и вы не даете пояснений.

Пусть в некой фирме определены всего четыре должности и иных должностей не предвидится. В данном случае все можно описать одной таблицей используя для описания должностей поле типа ENUM:

Код:
CREATE TABLE `structure` (
  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` varchar(150) NOT NULL COMMENT 'Имя',
  `post` enum('Шеф','Бухгалтер','Бригадир','Рабочий') NOT NULL COMMENT 'Должность',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=7;

INSERT INTO `structure` (`id`, `name`, `post`) VALUES
(1, 'Василий', 'Шеф'),
(2, 'Ангелина', 'Бухгалтер'),
(3, 'Петрович', 'Бригадир'),
(4, 'Николай', 'Рабочий'),
(5, 'Иваныч', 'Рабочий'),
(6, 'Кузьмич', 'Рабочий');
Внутренняя структура этого типа данных будет такой:

1 - Шеф
2 - Бухгалтер
3 - Бригадир
4 - Рабочий

Если в выборке указать поле post, то будет выведено соответственное значение как Бухгалтер, Рабочий и т.д., которое определено субъекту. Если же запросить значение этого поля как post+0 post (в старых версиях MySQL так post+0 AS post), то получим не текстовое значение этого поля, а числовое, то есть от 1 до 4, соответственно определенному.

Для того чтобы в форме оперировать этим полем как списком (при добавлении/редактировании субъектов), можно получить структуру этой таблицы, ее поля post и получим список

<select>
    <option value="">Выберите ...</option>
    <option value="1">Шеф</option>
    <option value="2">Бухгалтер</option>
    <option value="3">Боигадир</option>
    <option value="4">Рабочий</option>
</select>


При этом, если редактирование, то при выводе таблицы из базы можно получать как текстовое значение поля post так и числовое, сравнивая которое в цикле при построении списка со значениями ENUM отметь в списке должность рабочего (selected). Хотя можно проверять и равенство текстовых значений.

Записываться в базу при этом будет числовое значение. Это позволяет облегчить проверку ожидаемых данных.

Если же должности предполагают дополнения/изменения, то хранить их в поле типа ENUM не выгодно. В этом случае такие данные описывают в связанной таблице. Но если взять этот пример, то в результате получим такой же список, где число будет являться идентификатором этой таблицы. Поле post основной таблицы будет также будет содержать этот идентификатор. Если отношения Таблицы должностей и основной таблицы более сложные, то их связи описываются внешней таблицей связей.

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

Разберитесь в конце концов что за данные у вас, каково их назначение и создайте нормальную их структуру. Я так и не понял что к чему у вас.

Записи в базе типа 1, 'Федя', 'Грузчик', 'one', это искусственное создание проблем. Если я правильно понял из описанного вами.
Ответить с цитированием