Используя PHP, как я могу запросить эту базу данных mySQL через эти три таблицы? - PullRequest
0 голосов
/ 09 сентября 2011

Ненавижу отправлять новый вопрос, но у всех есть некоторые мелочи, достаточно отличающиеся, чтобы этот вопрос казался необходимым.

Пользователи должны ввести имя поставщика, а затем просмотреть все «виды» товаров, которые они купили у этой компании, в списке, отсортированном по наименьшему количеству в наличии на складе.

Описание: У меня есть три стола.
Есть больше полей, чем эти, но это соответствующие (насколько я могу судить).

stuff_table
stuff_vendor_name * (поиск в этом поле с помощью $ user_input, но только один результат для lookup_type) *
lookup_type

lookup_table
lookup_type
lookup_quantity (заказать по этому)
category_type

category_table
category_type
category_location (проверьте, если это поле == $ this_location, которое уже назначено)

Wordier Объяснение: Пользователи ищут значение, которое содержится только в stuff_table - отличные значения stuff_vendor_name для каждого lookup_type. Каждый предмет можно купить из нескольких источников. Идея состоит в том, чтобы узнать, продавал ли кто-либо из продавцов хоть один предмет любого типа.

Но результаты должны быть ORDER BY lookup_quantity, в lookup_table.

И, что важно, я должен проверить, ищут ли они правильное местоположение для этих категорий, расположенных в category_table в поле category_location.

Как мне эффективно сделать этот запрос?
Выше я упомянул переменные, которые у меня есть: $ user_input (значение, которое мы ищем для разных совпадений в поле stuff_vendor_name) и $ current_location.

Чтобы понять взаимосвязь этих таблиц, я буду использовать пример. В файле stuff_table будут десятки записей с десятками поставщиков, но они будут иметь тип поиска, скажем, «арбуз», «яблоко» или «вишня». Таблица lookup_table выдала бы category_type для «Jellybean». Один тип категории может иметь несколько lookup_types. Но у каждого lookup_type есть ровно один тип category_

Ответы [ 3 ]

0 голосов
/ 09 сентября 2011

С первого взгляда вы можете использовать внешние ключи в своих таблицах для установления связи между ними или использовать команду LEFT JOIN mysql для создания абстракции другой связанной таблицы.

Единственный пример, который я могу придуматьна паттерне Доктрины, но я думаю, вы поймете, что я говорю:

$q = Doctrine_Query::create()
->from('Default_Model_DbTable_StuffTable s')
->leftJoin('s.LookupTable l')
->leftJoin('s.CategoryTable c')
->orderBy('l.lookup_quantity DESC');
$stuff= $q->execute(array(), Doctrine_Core::HYDRATE_ARRAY);
0 голосов
/ 12 сентября 2011

Я вместо этого сделал вложенный запрос.

Окончательный код выглядит так:

$query_row=mysql_query(
"SELECT DISTINCT * FROM table_a WHERE 
field_1 IN (SELECT field_1 FROM table_b WHERE field_2 = $field_2) 
AND field_3 IN (SELECT field_3 FROM table_c WHERE field_4 = $field_4)
ORDER BY field_5 DESC
");

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

Я читал, что это "плохая форма", потому что это делает какую-то оптимизацию поиска не такой хорошей, как могла бы быть, поэтому будьте осторожны, используя вложенныевыберите заявления.

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

0 голосов
/ 09 сентября 2011

Вы не много рассказываете об отношениях, но попробуйте это:

   SELECT *
     FROM stuff_table st
LEFT JOIN lookup_table lt
       ON st.lookup_type = lt.lookup_type
LEFT JOIN category_table ct
       ON lt.category_type = ct.category_type
      AND ct.category_location = $this_location
 GROUP BY st.lookup_type
 ORDER BY lt.lookup_quantity
    WHERE st.stuff_vendor_name = $user_input
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...