it-swarm-eu.dev

Visualizzare i dati in base alla clausola multiple where?

Gradirei un aiuto con quanto segue.

Ho due campi personalizzati con ID "6" e "7".

Voglio visualizzare il campo_cambia personalizzato per campo personalizzato (6), solo quando viene soddisfatta una condizione specifica per campo personalizzato (7). Quindi deve visualizzare i dati da customfield (6) solo se customfield (7) ha un certo valore.

Ecco il codice che ho scritto, ma non funziona (mi dà solo spazio sul caricamento dei dati):

<?php 

$db = JFactory::getDbo();

$query = $db->getQuery(true);

$query->select($db->quoteName(array('customfield_value', 'virtuemart_product_id', 'virtuemart_custom_id')));
$query->from($db->quoteName('jos_virtuemart_product_customfields'));
$query->where($db->quoteName('virtuemart_custom_id'). ' LIKE '. $db->quote('6'). ' AND '. $db->quoteName('customfield_value') . ' LIKE '. $db->quote('Frozen') . ' AND '. $db->quoteName('virtuemart_product_id'). 'LIKE ' . $db->quote($product->virtuemart_product_id));

$db->setQuery($query);

$results = $db->loadResult();
echo ($results);

 ?>

Ecco il mio codice modificato che mostra come funziona la tabella in questo momento Ho incluso solo 4 campi personalizzati, poiché normalmente ce ne sono circa 20:

<table style="font-size: 12.5px; width: 100%;" class="orders">
<tr style="border: 1px solid #ffb3b3;">
<th style="text-align:center;border: 1px solid #ffb3b3;">Local ICOS</th>
<th style="text-align:center;border: 1px solid #ffb3b3;">Description</th>
<th style="text-align:center;border: 1px solid #ffb3b3;">Batch ID</th>
<th style="text-align:center;border: 1px solid #ffb3b3;">Temp Zone</th>
</tr>

<?php
// Start the Output
foreach ( $this->products as $product ) {

    // Show the horizontal seperator
    if ($iBrowseCol == 1 && $iBrowseProduct > $BrowseProducts_per_row) { ?>
    <div class="horizontal-separator"></div>
    <?php }
?>

<tr style="border-bottom: 1px solid #ffb3b3; height: 30px; display:;">

<!-- ICOS -->
<td style="width: 80px;text-align: center;">
<?php 
$db = JFactory::getDbo();
$query = $db->getQuery(true);

$query->select($db->quoteName(array('customfield_value', 'virtuemart_product_id')));
$query->from($db->quoteName('jos_virtuemart_product_customfields'));
$query->where($db->quoteName('virtuemart_custom_id') . ' LIKE '. $db->quote('5'). ' AND '. $db->quoteName('virtuemart_product_id') . 'LIKE ' . $db->quote($product->virtuemart_product_id));

$db->setQuery($query);
$results = $db->loadResult();
echo ($results); 
 ?>
</td>

<!-- Description -->
<td style="padding-left: 10px;width: 300px; color: #ff3333;">
<?php  echo $product->product_name; ?>
</td>

<!-- BATCH ID (SKU) -->
<td style="width: 80px;text-align: center;">
<?php 
$db = JFactory::getDbo();
$query = $db->getQuery(true);

$query->select($db->quoteName(array('customfield_value', 'virtuemart_product_id')));
$query->from($db->quoteName('jos_virtuemart_product_customfields'));
$query->where($db->quoteName('virtuemart_custom_id') . ' LIKE '. $db->quote('6'). ' AND '. $db->quoteName('virtuemart_product_id') . 'LIKE ' . $db->quote($product->virtuemart_product_id));

$db->setQuery($query);
$results = $db->loadResult();
echo ($results); 
 ?>
</td>

<!-- Temp Zone -->
<td style="width: 80px;text-align: center;">
<?php 
$db = JFactory::getDbo();
$query = $db->getQuery(true);

$query->select($db->quoteName(array('customfield_value', 'virtuemart_product_id')));
$query->from($db->quoteName('jos_virtuemart_product_customfields'));
$query->where($db->quoteName('virtuemart_custom_id') . ' LIKE '. $db->quote('21'). ' AND '. $db->quoteName('virtuemart_product_id') . 'LIKE ' . $db->quote($product->virtuemart_product_id));

$db->setQuery($query);
$results = $db->loadResult();
echo ($results); 
 ?>
</td>
</tr>
<?php } ?>
</table>

Ok. Ho un menu a discesa con "Frozen" come opzione. Quando seleziono "Frozen", devono essere mostrati solo i prodotti con la Temp Zone "Frozen". In ciascuno dovrò mettere un pezzo di codice per mostrare le informazioni a seconda della selezione a discesa.

1
MailBlade

Prova quanto segue che presenta alcune modifiche alla tua query e, si spera, dovrebbe stampare alcuni dati per te:

$db = JFactory::getDbo();

$query = $db->getQuery(true)
    ->select($db->qn(array('customfield_value', 'virtuemart_product_id', 'virtuemart_custom_id')))
    ->from($db->qn('#__virtuemart_product_customfields'))
    ->where($db->qn('virtuemart_custom_id') . ' = ' . $db->q('6'))
    ->where($db->qn('customfield_value') . ' = ' . $db->q('Frozen'))
    ->where($db->qn('virtuemart_product_id') . '= ' . $db->q($product->virtuemart_product_id));
$db->setQuery($query);

$results = $db->loadObjectList();

var_dump($results);

Modifiche:

  • Definizione corretta per il nome della tabella
  • Sostituisci LIKE con = poiché non stai cercando di abbinare qualcosa di simile, ma qualcosa di esatto.
  • Usa loadObjectList mentre chiami per ottenere dati da più colonne
1
Lodder