MySQL Query Search с использованием нескольких строк - PullRequest
0 голосов
/ 29 марта 2011

Во-первых, я хотел бы начать с извинения за потенциально недостоверный титул ... Мне трудно описать, что я пытаюсь сделать здесь.

В текущем проекте, над которым я работаю, мы настроили «динамическую» структуру базы данных с MySQL, которая выглядит примерно так:

item_details (Описывает item_data)

fieldID  |  fieldValue  |  fieldCaption

    1    |     addr1   |    Address Line 1

    2    |     country |    Country

item_data

itemID   |  fieldID  |  fieldValue

12345    |     1     |  Some Random Address

12345    |     2     |  United Kingdom

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

SELECT fieldValue FROM item_data WHERE fieldID=1 and itemID=12345;

Но вот где я застрял ... база данных относительно велика и содержит около 80 тыс. Строк, и я пытаюсь создать набор функций поиска в PHP.

Я бы хотел как можно быстрее выполнить запрос к набору результатов запроса ...

Например, поиск имени адреса в определенной стране ... т. Е. Поиск fieldValue результатов с теми же itemID, что и результаты запроса:

'SELECT itemID from item_data WHERE fieldID=2 and fieldValue='United Kingdom'..

Извините, если мне неясно, я боролся с этим последние пару дней ...

Приветствия

Ответы [ 2 ]

1 голос
/ 29 марта 2011

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

SELECT * 
FROM 
Item i
INNER JOIN item_data country
ON i.itemID = country.itemID
  and fieldid = 2
INNER JOIN item_data address
ON i.itemID = country.itemID
  and fieldid = 1
WHERE
    country.fieldValue= 'United Kingdom'
    and address.fieldValue= 'Whatever'

Помимо этой структуры, ее часто называют значением атрибута ввода илиEAV база данных

0 голосов
/ 29 марта 2011

Извините, если это звучит покровительственно, но (как вы предложили) Я не совсем понимаю, о чем вы просите.

Если вы ищете один запрос, чтобы сделать все это, вы можете просто вложить их. В качестве примера представьте, что есть таблица с именем CACHED с результатами вашего запроса в Великобритании, и напишите запрос, который вам нужен, но замените CACHED своим запросом в Великобритании.

Если идея заключается в том, что вы УЖЕ сделали этот запрос в Великобритании и хотите (повторно) использовать его результаты, вы можете сохранить результаты в таблицу в БД (что может быть непрактично, если имеется большое количество выполненные запросы), или сохраните список идентификаторов в виде текста и вставьте его в последующий запрос (... WHERE ID в (...) ...), что может быть хорошо, если ваш «кэшированный» запрос дает вам управляемый доля оригинальной таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...