Использование результатов одного запроса MySQL в другом запросе в PHP Envirnment

У меня проблема, это может быть простое решение проблемы, но я не могу понять ее. Я новичок в PHP и MySQL, поэтому я читаю все повсюду, но отсутствие опыта очень расстраивает, так как часто требуется много времени, чтобы реализовать небольшую ошибку. Ознакомьтесь со следующими таблицами и прочитайте ниже вопросы.

PHP / mysql находится в среде Joomla, я пытаюсь изменить плагин, так что это обновления значений из разных таблиц в набор других таблиц, которые изначально не были предназначены, но все таблицы находятся в одной базе данных.

Table 1 vm_orders --------------------------------------------- order_id user_id --------------------------------------------- 20 1 55 6 65 2 30 4 50 67 Table 2 vm_order_item --------------------------------------------- order_item_id order_id order_item_sku --------------------------------------------- 20 20 1 55 55 35 65 65 60 30 30 22 50 50 3 Table 3 xipt_ users --------------------------------------------------- userid Profiletype template ---------------------------------------------------- 1 1 default 6 3 default 2 1 default 4 8 default 67 7 default Table 4 community_fields_values --------------------------------------------- id user_id field_id value --------------------------------------------- 1 1 55 Female 2 6 35 Cat 3 2 2 2 4 4 18 Texas 5 67 12 bike 

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

  1. Запрос 1: я хочу получить значение «orderid» из столбца «order_id» таблицы vm_orders (таблица 1); я буду вызывать результат «vmorderid» и использовать его в другом запросе.

  2. Запрос 2: использование «vmorderid» из запроса 1 в качестве значения order_id в столбце «order_id» таблицы vm_order_item (таблица 2). Я хочу получить значение order_item_sku из столбца «order_item_sku» таблицы my_order_item (таблица 2). Я буду называть результат «vmsku» и использовать его в другом запросе.

  3. Запрос 3: Использование «vmsku» из запроса 2 в качестве значения свойства профиля в столбце «Тип профиля» таблицы vm_users (таблица 3). Я хочу ОБНОВЛЯТЬ значение столбца «profiletype» с значением «vmsku».

  4. Запрос 4: использование «vmsku» из запроса 2 в качестве значения в столбце «значение» community_fields_values ​​(таблица 4). Я хочу ОБНОВИТЬ значение столбца «значение» в my_fields_values ​​(таблица 4) «vmsku».

Хорошо, надеюсь, вы со мной до сих пор, я попробовал пару запросов, но он не работает. Вот что я имею до сих пор:

Предполагая, что пользователь передается из поля param.

 $userid = $this->params->get('userid', 'defaultValue'); function _vm_custom_order($vmorderId) { $vmorderId = $database->loadResult(); $database = JFactory::getDBO(); // query the db to see if the user is already a member of group $vmorderId =" SELECT MAX `order_id` FROM #__vm_orders'; WHERE `user_id` = '{$userid}' "; $database->setQuery( $vmorderId ); $data = $database->loadResult(); return $data; } function _vm_sku($vmsku) { $vmsku = $database->loadResult(); $database = JFactory::getDBO(); // query the db to see if the user is already a member of group $vmsku = " SELECT `product_sku` FROM #__vm_order_item'; WHERE `order_id` = '{$vmorderId}' "; $database->setQuery( $vmsku ); $data = $database->loadResult(); return $data; } function _add( $userid, $groupid, $vmsku) { $success = false; $database = JFactory::getDBO(); if (!$allow_multiplegroups = $this->params->get( 'allow_multiplegroups', '1' )) { // query the db to see if the user is already a member of ANY group $database->setQuery(" SELECT `profiletype` FROM #__xipt_users WHERE `userid` = '{$userid}' "); $member = $database->loadResult(); // if so, do not execute if (intval($member) > 0) { return $success; } } $already = plgAmbrasubsAddToXipt::_already( $userid, $groupid ); if (($already != $userid)) { $database->setQuery(" SELECT MAX `order_id` FROM #__vm_orders WHERE `user_id` = '{$userid}' "); $vmorderId = $database->loadResult(); if ($database->query()) { $success = true; } } if (($already != $userid)) { $database->setQuery(" SELECT `product_sku` FROM #__vm_order_item WHERE `order_id` = '{$vmorderId}' "); $vmsku = $database->loadResult(); if ($database->query()) { $success = true; } } // if they aren't already a member of the group, add them to the group if (($already != $userid)) { $database->setQuery(" UPDATE #__xipt_users SET `profiletype` = '{$vmsku}' WHERE `userid` = '{$userid}' LIMIT 1 "); if ($database->query()) { $success = true; } } return $success; } } 

Я также пробовал это так:

 function _add( $userid, $groupid, $vmsku) { $success = false; $database = JFactory::getDBO(); if (!$allow_multiplegroups = $this->params->get( 'allow_multiplegroups', '1' )) { // query the db to see if the user is already a member of ANY group $database->setQuery(" SELECT `profiletype` FROM #__xipt_users WHERE `userid` = '{$userid}' "); $member = $database->loadResult(); // if so, do not execute if (intval($member) > 0) { return $success; } } $already = plgAmbrasubsAddToXipt::_already( $userid, $groupid ); if (($already != $userid)) { $database->setQuery(" SELECT MAX `order_id` FROM #__vm_orders WHERE `user_id` = '{$userid}' "); $vmorderId = $database->loadResult(); if ($database->query()) { $success = true; } } if (($already != $userid)) { $database->setQuery(" SELECT `product_sku` FROM #__vm_order_item WHERE `order_id` = '{$vmorderId}' "); $vmsku = $database->loadResult(); if ($database->query()) { $success = true; } } // if they aren't already a member of the group, add them to the group if (($already != $userid)) { $database->setQuery(" UPDATE #__xipt_users SET `profiletype` = '{$vmsku}' WHERE `userid` = '{$userid}' LIMIT 1 "); if ($database->query()) { $success = true; } } return $success; } } 

EDIT: Я теперь попробовал, как было предложено, использовать JOIN для выполнения задачи, до сих пор не радует!

ОБНОВИТЬ

  #__xipt_users SET `profiletype.#__xipt_users` = `product_sku.#__vmsku` WHERE `userid` = '{$userid}' AND ( SELECT `order_id.#__vm_orders` FROM #__vm_orders, #__vm_order_item LEFT JOIN #__vm_orders ON #__vm_orders.`order_id` = #__vm_order_item.`order_id` ORDER BY `order_id.#__vm_order` DESC LIMIT 1 WHERE `user_id.#__vm_orders` = '{$userid}' ) AS #__vmorder_id SELECT ` product_sku.#__vm_order_item` FROM #__vm_order_item, #__vmorder_id LEFT JOIN #__vm_order_item ON `#__vm_order_item.order_id` = `#__vmorder_id.order_id` WHERE `order_id.#__vm_order_item` = `order_id.#__vmorder_id` ) AS #__vmsku LIMIT 1 "); 

Присоединиться к заявлениям
Я бы посоветовал вам начать изучать, как создавать утверждения Join в MySQL.

Посмотрите на этот сайт:
http://www.keithjbrown.co.uk/vworks/mysql/mysql_p5.php

Таким образом, вы можете объединить несколько запросов в один. Это сделает эту работу намного проще!

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