php explode () переменная из базы данных MySQL - правильный синтаксис? - PullRequest
0 голосов
/ 07 февраля 2012

У меня есть форма, где пользователи выбирают из контрольного списка работ (инструктор, переводчик, переводчик).Результаты сохраняются в виде переменной ($ job) и отправляются в базу данных MySQL.Они разделены запятыми.

Администрация может войти через внутреннюю страницу и отправляется в каталог, где перечислены различные задания.При нажатии на ссылку «Инструкторы» они переходят на страницу, где перечислены все пользователи, которые щелкнули «Инструкторы».

Для этого я использовал код: $ sql = "select * from GDI_teacher WHERE $ занятости =" Инструктор "";

Но если пользователь выбрал более одной работы (скажем,, Инструктор и Переводчик), этот пользователь не отображается как щелкнувший по Инструктору с использованием приведенного выше кода.

Я считаю, что должен использовать функцию explode (), но не уверен в синтаксисе.Я угадал код (из других сообщений на форуме), но безуспешно.

Надеюсь, это понятно.Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 07 февраля 2012

С Руководство по PHP :

<?php
// Example 1
$pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2

// Example 2
$data = "foo:*:1023:1000::/home/foo:/bin/sh";
list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);
echo $user; // foo
echo $pass; // *

?>

Надеюсь, это поможет вам.

1 голос
/ 07 февраля 2012

explode() поможет вам только после того, как вы запустите запрос и получите результаты в PHP. Вы ДОЛЖНЫ создать реляционную таблицу для хранения этих данных, но если вы хотите получить все правильные результаты в MySQL, вы должны создать полнотекстовый индекс и выполнить поиск MySQL по этому. Кроме того, вы можете выполнить гораздо менее эффективный запрос:

$sql = "select * from `GDI_teacher` WHERE `employment` LIKE '%Instructor%'";

Размещение символов подстановки с обеих сторон позволит строке соответствовать:

'Instructor'
'[something],Instructor'
'Instructor,[something]'
'[something],Instructor,[something]'

Однако! Будьте очень осторожны ... если есть какая-либо вероятность того, что текстовые категории будут совпадать (например, «Инструктор» и «Инструктор по науке»), вам необходимо создать более сложный запрос (если вы не собираетесь ( a) Просто создайте реляционную таблицу (BEST SOLUTION) или (b) Fulltext-Index (OK SOLUTION)) ваш последний запрос будет выглядеть так:

$sql = "select * from `GDI_teacher` WHERE 
            `employment` LIKE 'Instructor'
            OR `employment` LIKE 'Instructor,%'
            OR `employment` LIKE '%,Instructor'
            OR `employment` LIKE '%,Instructor,%'"

Если вы хотите попробовать реляционную таблицу, вам нужно настроить вторую таблицу MySQL, чтобы ваша структура выглядела следующим образом:

Таблица 1

`UserID   |   UserName   |    UserEmail    |   etc`
..........................................................
1         |   John Doe   |   anon@aol.com  | [More]
2         |   Jane Doe   |   jane@aol.com  | [More]
3         |   Jake Doe   |   jd@yahoo.com  | [More]

Таблица 2

UserID   |   Employment 
.........................
1         |   Instructor
1         |   Translator  
2         |   Instructor  
2         |   Translator  
2         |   Interpreter
3         |   Instructor

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

Просто убедитесь, что UserID является автоинкрементным первичным ключом в Таблице 1, и что он проиндексирован (но не уникален или не первичен) в Таблице 2. В зависимости от размера таблицы 2, вы можете индексировать оба UserID и Employment

...