it-swarm.com.de

Führen Sie die UPDATE-Abfrage für das SELECT-Abfrageergebnis aus

Ich möchte eine UPDATE-Abfrage für einen Datensatz ausführen, nachdem ich ihn ausgewählt habe.

$db = JFactory::getDbo();

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

$query
   ->select(array('p.*', 'u.id', 'u.name' ,'pr.*'))
   ->from($db->quoteName('#__chichi_photos', 'p'))
   ->join('LEFT', $db->quoteName('#__users', 'u') . ' ON (' . $db->quoteName('p.userID') . ' = ' . $db->quoteName('u.id') . ')')
   ->join('LEFT', $db->quoteName('#__chichi_profile', 'pr') . ' ON (' . $db->quoteName('pr.userID') . ' = ' . $db->quoteName('u.id') . ')')
   ->where($db->quoteName('p.id') .'=' . $photoID .'');

$db->setQuery($query);

$results = $db->loadRow();

Ich möchte eine UPDATE-Abfrage für ein Feld in der Tabelle #__chichi_photos ausführen, das eine ID im Ergebnis enthält, und wenn möglich mit einer einzelnen Abfrageanweisung.

Grundsätzlich möchte ich die Spalte "Treffer" auf dem Feld aktualisieren, nachdem es ausgewählt wurde. Danke dir.

1
David Addoteye

Sie können $query->clear(); verwenden, um die Daten aus Ihrer ersten Abfrage zu löschen. So können Sie dann Ihre update - Abfrage verwenden:

$db = JFactory::getDbo();

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

$query
   ->select(array('p.*', 'u.id', 'u.name' ,'pr.*'))
   ->from($db->quoteName('#__chichi_photos', 'p'))
   ->join('LEFT', $db->quoteName('#__users', 'u') . ' ON (' . $db->quoteName('p.userID') . ' = ' . $db->quoteName('u.id') . ')')
   ->join('LEFT', $db->quoteName('#__chichi_profile', 'pr') . ' ON (' . $db->quoteName('pr.userID') . ' = ' . $db->quoteName('u.id') . ')')
   ->where($db->quoteName('p.id') .'=' . $photoID .'');

$db->setQuery($query);

$results = $db->loadRow();


// SECOND PART OF THE QUERY
$query = $db->getQuery(true);
$query->clear();

$fields = array(
    $db->quoteName('hits') . ' = ' . $db->quote($results[0]),
);     
$conditions = array( 
    $db->quoteName('id') . ' = ' . $db->quote($results[1])
);

$query->update($db->quoteName('#__chichi_photos'))
      ->set($fields)
      ->where($conditions);

$db->setQuery($query);

try
{
    $db->execute();
}
catch (RuntimeException $e)
{
    $e->getMessage();
}

Sie müssen wahrscheinlich $results[0] Und $results[0] Ändern, damit die Indizes, die Ihre erste Abfrage ausgibt, angezeigt werden.

Hoffe das hilft

2
Lodder

Ihre Frage bezüglich des Ziels ist etwas unklar, da es keinen veröffentlichten UPDATE - Codierungsversuch gibt, aber ich gehe davon aus, dass Sie die Trefferanzahl in der #__chichi_photos - Tabelle mit $photoID Wert.

$photoID = 1;                                        // whatever you set it to be
$db = JFactory::getDBO();
try {
    $query = $db->getQuery(true)
                ->update("#__chichi_photos")
                ->set("hit = hit + 1")               // increment the row's value
                ->where("id = " . (int)$photoID);    // cast as int for security/stability
    echo $query->dump();                             // show yourself the query being run
    $db->setQuery($query);
    $db->execute();
    if ($affrows = $db->getAffectedRows()) {         // check for "logical" success
        echo "Incremented hit count for photo# $photoID";
    } else {                                         // catch "logical" failure
        echo "Failed to increment hit count for photo# $photoID";
    }
} catch (Exception $e) {                             // catch any syntax failures
    echo "Query Syntax Error: " , $e->getMessage();  // never show getMessage() to public
}
0
mickmackusa