Je suis nouveau dans le codage Joomla personnalisé, alors excusez-moi, je veux exécuter l'instruction suivante:
"SELECT
MAX(CASE WHEN v.FieldName = 'Team_Name' THEN v.FieldValue END) 'Team_Name'
, MAX(CASE WHEN v.FieldName = 'Manager_Name' THEN v.FieldValue END) 'Manager_Name'
FROM `team_values` v
where tournamentId=5"
mais je ne sais pas trop comment l'écrire, j'ai essayé plusieurs scénarios, mais ils n'ont pas fonctionné pour moi.
Je pense que vous demandez, le code Joomla pour exécuter la requête?
si oui
$db = JFactory::getDBo();
$query = $db->getQuery(true);
$query->select("MAX(CASE WHEN v.FieldName=".$db->q('Team_Name')." THEN v.FieldValue END) as Team_Name, MAX(CASE WHEN v.FieldName = ".$db->q('Manager_Name')." THEN v.FieldValue END) as Manager_Name")->from('#__team_values as v')->where('v.tournamentId='.$db->q(5));
$db->setQuery($query);
$final_data = $db->loadObject();
Si vous êtes nouveau, j'aimerais inclure une vérification d'erreur de base, ainsi que l'impression de la requête générée et du jeu de résultats à 2 colonnes.
Code non testé:
$db = JFactory::getDBO();
try {
$query = $db->getQuery(true)
->select(
array(
"MAX(CASE WHEN v.FieldName = 'Team_Name'
THEN v.FieldValue END) 'Team_Name'",
"MAX(CASE WHEN v.FieldName = 'Manager_Name'
THEN v.FieldValue END) 'Manager_Name'"
)
)
->from("#__team_values v")
->where("v.tournamentId = 5");
echo $query->dump(); // only if you wish to see what is generated. Of course, don't do this on your live/public site
$db->setQuery($query);
echo "<pre>";
var_export($db->loadAssocList()); // display the resultset
echo "</pre>";
} catch (Exception $e) {
echo "<div>", $e->getMessage(), "</div>"; // show error, if any. Of course, don't do this on your live/public site
}
Comme votre requête n'utilise aucune variable ni mot clé réservé mysql, vous pouvez réduire le fardeau de code en omettant les appels $db->q()
et $db->qn()
pour citer les noms de tables, les colonnes et les valeurs. Le nombre entier 5 n'a pas besoin d'être guillemet simple.
Je préfère enchaîner les méthodes de requête ->
De getQuery
afin que $query
N'ait pas besoin d'être réécrit.
Si vous voulez voir une question similaire à laquelle j'ai répondu avec une requête entièrement citée par joomla, lisez cet article .
J'ai des incertitudes/préoccupations ...
Ceci est juste une reproduction de votre SQL utilisant les appels de méthode Joomla SQL. Je ne suis pas tout à fait sûr que cette requête fonctionnera comme vous le souhaitez. Si vous fournissez une démonstration SQLFiddle de votre structure/données de table et expliquez le résultat attendu, je serai en mesure de vérifier ou de corriger la requête elle-même. loadRowList()
, loadAssocList()
et loadObjectList()
génèrent un résultat multi-ligne, mais si vous n'attendez qu'une seule ligne, alors loadRow()
, loadAssoc()
ou loadObject()
conviendra mieux.
MAX()
est un choix étrange si FieldValue
n'est pas numérique; peut-être que ce n’est pas mieux pour votre requête. Peut-être pouvez-vous nous expliquer pourquoi vous utilisez MAX()
. Si les valeurs FieldValue
sont numériques, la décision de nommer les FieldName
valeurs [Word]_Name
Me préoccupe. Je veux dire, peut-être que [Word]_id
Serait plus approprié.