it-swarm.com.de

Daten aus 2 Tabellen auswählen und in eine 3. Tabelle einfügen

Könnte mir jemand helfen, eine Abfrage mit der Joomla-API zu erstellen? Ich bin im Kreis gefahren.

Was ich bisher habe:

<?php
// Get a db connection.
$db = JFactory::getDbo();

// Create a new query object.
$query = $db->getQuery(true);

// Insert columns.
$columns = array('virtuemart_media_id', 'virtuemart_product_id');

// Insert values.
$values = array(); <---- How can i get the values

// Prepare the insert query.
$query
    ->insert($db->quoteName('#__virtuemart_product_medias'))
    ->columns($db->quoteName($columns))
    ->values(implode(',', $values));

// Set the query using our newly populated query object and execute it.
$db->setQuery($query);
$db->execute();

?/>

Die von mir gewünschten Werte basieren nun auf den folgenden Angaben:

  • virtuemart_media_id = #__virtuemart_medias.virtuemart_media_id
  • virtuemart_product_id = #__virtuemart_products.virtuemart_product_id
  • WO #__virtuemart_products.product_sku = #__virtuemart_medias.explode("-", strtoupper('file_url'), 2)

Ich möchte die Werte in die Tabelle #__virtuemart_product_medias Einfügen.

1
Dtorr1981

müssen Sie es wirklich mit PHP verarbeiten? 1 Abfrage und MySQL erledigt alles sehr schnell

insert into #__table3 (column1, column2)

select column1, column2

alles in einer abfrage und du kannst jeden join benutzen und ich glaube sogar union (union ist nicht getestet)

sie können diese Abfrage auch mit Joomla erstellen

und das ist es. Keine Schleife notwendig. getestet - Effizienz ist mindestens 2500 mal schneller :) (realer Datenmigrationstest)

2
Alexandr

Die Funktion explode gibt ein Array zurück. Ihr erster Code ergibt für mich keinen Sinn. und ich kenne virtuemart tables; Wenn ich die file_url aus der Abfrage bekomme, würde ich Folgendes tun:

//Select just the product sku from the file url
$query = $db->getQuery(true);
$query->select($db->qn(array('file_url')))
  ->from($db->qn('#__virtuemart_medias'));
$db->setQuery($query);
$object =  $db->loadObjectList();

Die große Frage ist, was möchten Sie von den virtuemart-Tischen bekommen? Im zweiten Code gibt es weder eine virtuemart_product_id noch eine product_sku in der Tabelle virtuemart_medias.

Ich möchte die product_id von virtuemart_products erhalten, basierend auf der sku aus der file_url, und dann die virtumart_media_id und virtuemart_product_id in die virtuemart_product_medias-Tabelle einfügen. Effektives Verknüpfen von Mediendateien mit derselben Produktsku mit dem Produkt selbst.

//this is e.g. the file-url:
$file-url = '/blabla/stock/knife/picture1.png'; 
$path_parts = pathinfo($file-url);
//get the last dir (i.e.knife)
$skus = explode('/',path_parts['dirname']); // explodes /blabla/stock/knife
$product_sku = array_pop($skus); //here you've to proof if its empty..
if (empty($product_sku)) return false;
$filename = path_parts['basename']; //picture1.png
$db = JFactory::getDbo();
$query = $db->getQuery(true)
  ->select($db->qn(array('virtuemart_product_id','product_sku')))
  ->from($db->qn('#__virtuemart_products'))
  ->where($db->qn('product_sku').' = '.$db->q($product_sku));
$product = $db->loadObject();

dann müssen Sie die Datei in die Tabelle #__virtuemart_medias einfügen und die virtuemart_media_id aus der Einfügung abrufen. und danach müssen Sie die Relation in die Tabelle #__ virtuemart_product_medias einfügen ... viel Glück. Ich denke, ein guter Anfang ist hier: https://docs.joomla.org/Inserting,_Updating_and_Removing_data_using_JDatabase Sie können auch Objekte mit der Klasse JTable in Joomla verwenden.

0
Tom Kuschel