Pagina 1 di 1
Modifica query
Inviato: 04/01/2013, 20:17
da Pieros
Ciao a tutti, premetto che sono alle prime armi in php e in SQL, comunque,
sto cercando di apportare una modifica ad un file in php dove ho cambiato la tabella e i campi di una query dove ho aggiunto anche "ORDER BY", purtroppo mi da un errore: la variabile in uscita "$aup_topay" risulta "0", se tolgo "ORDER BY" invece mi viene un valore a caso e non l'ultimo della lista che è quello che mi interessa; forse c'entra qualcosa la riga "$db->next_record()";
la query è questa:
Codice: Seleziona tutto
$q ="SELECT order_total FROM #__{vm}_orders `ORDER BY `order_id` DESC WHERE user_id='".$aup_vendoruserid."'";
$db->query($q);
$db->next_record();
$aup_cprice = $db->f("order_total");
$aup_cprice= round($aup_cprice,2);
$aup_topay = $aup_cprice * $paypcentage / 100 / $aupoint;
qualcuno mi puoi dare una mano per favore?
Re: Modifica query
Inviato: 04/01/2013, 22:06
da Pieros
Ho risolto scrivendo la prima riga così:
Codice: Seleziona tutto
$q ="SELECT order_total FROM #__{vm}_orders WHERE user_id=$aup_vendoruserid ORDER BY order_id DESC";
Re: Modifica query
Inviato: 05/01/2013, 9:52
da Pieros
Credevo di avere risolto, ma purtroppo non è così: da prove più accurate ho constatato che la query da ancora risultati sbagliati.
Spero sempre che qualcuno mi dia una mano.
Ciao.
Piero.
Re: Modifica query
Inviato: 05/01/2013, 14:36
da Carlo
1) Se esegui la query direttamente nel database, per esempio con phpMyAdmin, ti ritornano sempre risultati errati?
2) Che intendi con risultati sbagliati?
Re: Modifica query
Inviato: 05/01/2013, 16:01
da Pieros
Proprio così, guardando la tabella del db in oggetto con phpadmin nel pannello di controllo del mio provider noto che il valore "$aup_topay" non è l'ultimo inserito ma uno a caso dei precedenti.
Se può essere utile posso copiare il pezzo di codice dove è inserita la query.
Re: Modifica query
Inviato: 05/01/2013, 16:13
da Pieros
Ho provato ad eseguire la query direttamente in phpadmin e mi da esattamente la tabella selezionata ed ordinata, quindi mi viene da pensare che l'errore dovrebbe stare nel metodo con cui viene preso il primo campo della tabella.
Ma dove?
Re: Modifica query
Inviato: 05/01/2013, 22:30
da Carlo
1) C'è un ciclo per leggere un record alla volta?
2) Dal tuo codice sembra che usi una classe personalizzata per leggere dal database.
Re: Modifica query
Inviato: 07/01/2013, 16:29
da Pieros
Questa è la parte di codice in cui c'è la Mia modifica:
Codice: Seleziona tutto
$aupoint = 1; // As AUP doesn't care about decimals, we recommend setting the smallest unit the currency can handle
$naming = 0 ; // 0 for username , 1 for realname
$profileman = 0 ; // 0 for Community Builder, 1 for Jomsocial
$profileitemid = '89' ; // Set here your own user profiles itemid
$paypcentage = 100; // here 90 goes to the vendor so finally only 10 to the site owner.
// End parameters
if($naming==0) $naming = 'username';
elseif ($naming==1) $naming = 'name';
$aup_download_id = $db->f("download_id");
$aup_file_name = $db->f("file_name");
$aup_clientid = $db->f("user_id");
$aup_productid = $db->f("product_id");
/// Here we get the naming of the customer:
$q="SELECT ".$naming." FROM #__users WHERE id='".$aup_clientid."'";
$db->query($q);
$clientnaming = $db->loadResult();
if($profileman==0)
$clientprofileurl = JRoute::_('index.php?option=com_comprofiler&task=userProfile&user='.$aup_clientid.'&Itemid='.$profileitmeid);
elseif($profileman==1)
$clientprofileurl = JRoute::_('index.php?option=com_community&view=profile&userid='.$aup_clientid.'&Itemid='.$profileitemid);
// we get the first part of the sku from the file name which corresponds to the vendor userid
$aup_exploded = explode(".",$aup_file_name);
$aup_vendoruserid = $aup_exploded[0];
// we get the shopper group of the customer to determine the price he paid the product
// so we don't reward too much the vendor if the customer had a special price from his shoppergroup
$q ="SELECT shopper_group_id FROM #__{vm}_shopper_vendor_xref WHERE user_id='$aup_clientid'";
$db->query($q);
$db->next_record();
$aup_shoppergroup = $db->f("shopper_group_id");
// Mia modifica
[b$q ="SELECT order_total FROM #__{vm}_orders WHERE user_id=$aup_vendoruserid ORDER BY order_id DESC";
$db->query($q);
$db->next_record();
$aup_cprice = $db->f("order_total");
$aup_cprice= round($aup_cprice,2);
$aup_topay = $aup_cprice * $paypcentage / 100 / $aupoint;
////////////// Payment via AUP API//////////////////////
$informationdata = ''.$aup_file_name.' - Acquirente: '.$clientnaming.'';
$referencekey = 'Download ID: '.$aup_download_id;
$api_AUP = JPATH_SITE.DS.'components'.DS.'com_alphauserpoints'.DS.'helper.php';
if ( file_exists($api_AUP))
{
require_once ($api_AUP);
$aupid = AlphaUserPointsHelper::getAnyUserReferreID( $aup_vendoruserid );
if ( $aupid ) AlphaUserPointsHelper::newpoints( 'plgaup_vm_payment2vendor', $aupid, $referencekey , $informationdata , $aup_topay );
}
// decrement the download_max to limit the number of downloads
$q ="UPDATE `#__{vm}_product_download` SET";
$q .=" `download_max`=`download_max` - 1";
$q .=" WHERE download_id = '" .$download_id. "'";
$db->query($q);
$db->next_record();
}
if ($end_date=="0") {
// Set the Download Expiry Date, so the download can expire after DOWNLOAD_EXPIRE seconds
$end_date=time('u') + DOWNLOAD_EXPIRE;
$q ="UPDATE #__{vm}_product_download SET";
$q .=" end_date=$end_date";
$q .=" WHERE download_id = '" . $download_id . "'";
$db->query($q);
$db->next_record();
}
Grazie anticipatamente.
Piero.
Re: Modifica query
Inviato: 08/01/2013, 13:23
da Pieros
Ho scoperto che la query è sintatticamente esatta e che l'errore è nella struttura logica del database, nel senso che il valore del risultato che sembrava casuale era invece dovuto alla struttura dei dati della tabella.
Per ottenere il giusto risultato ho individuato un'altra strada che necessita solo una query su due tabelle in relazione tra loro con un campo.
Pertanto, grazie veramente per l'aiuto che comunque mi ha indicato la giusta strada per la soluzione.
Ciao.
Piero.