ИСПОЛЬЗОВАНИЕ PDO & MYSQL для сравнения строк и переключения на столбцы - PullRequest
0 голосов
/ 08 июля 2011

У меня есть таблица «Продукты», таблица «Отпечаток», таблица «Производитель» и таблица ингредиентов - вместе с другими таблицами.

В настоящее время я генерирую информацию и использую то, что называется "имя_файла", в качестве идентификатора (это назначенный FDA идентификатор из 36-40 цифр, который идет с каждым продуктом). То, что происходит сейчас - люди вводят несколько букв, а выпадающий список автозаполнения дает точное написание. Когда они нажимают SUBMIT, и это вызывает все записи, которые соответствуют. Если они выбирают общий продукт, он также включает в себя продукт «бренд» - если они вводят бренд, он также включает общий продукт.

Текущий дисплей выглядит следующим образом:

Sold by:        Sold using   Available    Chemical name                Data based
                  name        Since:                                   on company 
                                                                     report submitted: 
C----- Health    Lortab      2011-01-13  Hydrocodone Bitartrate etc  2010-12-07

R—Distributors   Hydrocodone 2010-02-18  Hydrocodone Bitartrate etc  2009-12-17
                 Bitartrate
                 And Acetaminophen

C-- Health       Vicodin     1983-01-07   Hydrocodone Bitartrate etc  2009-11-03

R—Distributors   Hydrocodone 2010-07-30   Hydrocodone Bitartrate etc  2010-12-28
                 Bitartrate
                 And Acetaminophen

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

СЛЕДУЮЩИЙ ШАГ:

После того, как они проверят 1, 2 или 3 элемента, я хочу отобразить их так:

«ВСЕ версии проверенного продукта содержат следующие ингредиенты:» (те ингредиенты, которые являются общими для всех выбранных продуктов).

АЦЕТАМИНОФЕН, ЦЕЛЛЮЛОЗА, КУКУРУЗ, КРОСПОВИДОН, БИТАРТРАТ ГИДРОКОДОНА, МИКРОКРИСТАЛЛИЧЕСКИЙ, КРАСИВЫЙ И СТЕАРИЧНАЯ КИСЛОТА

(Показать ингредиенты в каждом продукте, НЕ объединенные всеми. Конечный результат в КОЛОННАХ)

«Кроме того, КАЖДЫЙ из выбранных вами продуктов содержит следующие ингредиенты:«

COLUMN 1(Product 1)         COLUMN 2 (Product 2)         COLUMN 3 ( Product 3)
COPOVIDONE                  MAGNESIUM STEARATE         CROSCARMELLOSE SODIUM
CROSCARMELLOSE SODIUM       POVIDONE                   D&C YELLOW NO. 10
D&C RED NO. 27              SILICON DIOXIDE            FD&C BLUE NO. 1
D&C RED NO. 30                                         POVIDONE
HYDRATED SILICA                                        SILICON DIOXIDE
MAGNESIUM STEARATE                                     SUCROSE

Конец дисплея

Таблица ингредиентов: 20 000 строк, 46 столбцов. Каждый ряд представляет собой отдельный препарат и содержит идентификатор, имя файла и затем ингредиенты. Каждый препарат (ряд) имеет различную комбинацию и количество ингредиентов. Неиспользуемые поля помечены как «пустые»;

столбцы ингредиентов в каждой строке:
id, имя_файла, 0_средний, 1_средний, 2_средний, 3_средний, 4_средний, 5_средний, 6_средний, 7_средний, 8_средний, 9_средний, 10_средний, 11_средний, 12_редн 43_гр.)

Вопрос в том, как и какой подход использовать для получения нужного мне формата ингредиентов. У меня есть опыт разработки систем регистрации, я достаточно хорошо разбираюсь в PHP и начинаю привыкать к PDO. Мой Sql-опыт минимален и, в основном, требует знания.

Я задавался вопросом, должен ли я сосредоточиться на монстре запроса MySQL или на стороне php. Я подумал о запросе, который дает ингредиенты, общие для всех 3, а затем вычитает этот результат из каждого отдельного списка лекарств, чтобы получить Часть II, но это выглядит довольно продвинутым mysql - тем более, что мне нужны данные для переключения со строки на макет COLUMN. Любая помощь?

Другая идея состояла в том, чтобы сделать запрос, объединяющий компоненты каждой строки, а затем выполнить процедуры массива на стороне php. Проблемы, мне трудно найти правильный код для извлечения ингредиентов из каждой строки, так как количество полей «NULL» по сравнению с «используемыми» полями варьируется в зависимости от каждой строки. (Как подсчитать нулевые столбцы в запросе PDO? Я попытался получить полное количество столбцов в таблице.)

Для меня это умник с несколькими шагами. Я ищу «волшебный» код MySql (если он существует) и / или предложения относительно того, какой подход (используя php, mysql, PDO) вы бы использовали.

Ваш интерес / помощь приветствуются! Лора

1 Ответ

0 голосов
/ 10 июля 2011

Я нашел способ php сделать то, что мне нужно. Я уверен, что есть более быстрый способ MySql. Если вы знаете, пожалуйста, поделитесь! Лора

Во-первых, для пустых значений Mysql по умолчанию установлено значение "no_ingre".

Затем я сделал следующий код 3 раза для 3 вариантов: ВЫБЕРИТЕ ' все поля ингредиентов ГДЕ id = $ name_of_id'

$result=$stmt->fetch(PDO::FETCH_ASSOC);
foreach($result as $key => $value) {
    if ($value == "no_ingre") unset($result[$key]);
}

НАЙТИ ингредиенты, общие для всех:

$same_detect= array_intersect($result, $result2, $result3);
$p_same=(implode(", ", $same_detect));

echo "<br />The below ingredients are in all of the chosen products<br />";
echo $p_same;

Чтобы найти тех, кто не является общим для всех: выполните приведенный ниже код 3 раза (для каждого набора ингредиентов):

foreach ($result as $item) {
if (!in_array($item, $same_detect, true)) {
echo ("<tr><td>" . $item . "</td></tr>"); }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...