क्या जडाटबेस के साथ एक साथ कई रिकॉर्ड्स डाले जा सकते हैं?


11

लूप का उपयोग करने के बजाय, क्या जूमला डेटाबेस फ़ंक्शन इस तरह से एसक्यूएल स्टेटमेंट बना सकते हैं?

INSERT INTO #__tablename (col1,col2)
VALUES 
 ('1', 'one'),
 ('2', 'two'),
 ('3', 'three'),
...
 ('999', 'three'),

डॉक्स JDatabase का उपयोग कर डेटाबेस तक पहुँचने , लेन-देन का संदर्भ लें और SQL या ऑब्जेक्ट का उपयोग करें, लेकिन दोनों ही मामलों में कई मानों का कोई उल्लेख नहीं है।

जवाबों:


12

यह स्तंभों को सम्मिलित करने के लिए तार की एक सरणी होने के साथ, का उपयोग करके ->insert()और पूरा किया जा सकता है ।->values()$values

$db = JFactory::getDbo();
$query = $db->getQuery(true);

$columns = array('col_one','col_two');
$values = array();
// Proper escaping/quotes should be done here, and probably in a loop, but cluttered the answer, so omitted it
$values[] = '1, "one"';
$values[] = '2, "two"';
$values[] = '3, "three"';
$values[] = '999, "nineninetynine"';

$query->insert($db->quoteName('#__tablename'));
$query->columns($columns);
$query->values($values);
$db->setQuery($query);
$db->query();

एसक्यूएल जो का उपयोग करके उत्पादित किया जाता है echo $query->dump()

INSERT INTO `xyz_tablename`
(col_one,col_two) VALUES 
(1, "one"),(2, "two"),(3, "three),(999, "nineninetynine")

3

जूमला कोर बुनियादी एसक्यूएल प्रश्नों का समर्थन करता है। आप कई आवेषणों को संग्रहीत करने के लिए एक वर्ग बना सकते हैं और अंत में एकल आवेषण को निष्पादित करने के लिए एक एकल अंतिम क्वेरी बना सकते हैं।

    public function flushInserts()
{
    $db = JFactory::getDbo();

    foreach ($this->bulk_tables as $table)
    {
        // No inserts
        if (!array_key_exists($table, $this->bulk_inserts))
        {
            continue;
        }

        $tableq = $db->qn($table);

        $insertSet = $this->bulk_inserts[$table];
        $values = implode(',', $insertSet);
        $query = 'INSERT INTO ' . $tableq . ' VALUES ' . $values . ';';

        $db->setQuery($query);
        $db->execute();

        if ($error = $db->getErrorMsg())
        {
            throw new Exception($error);
        }
    }

    $this->bulk_inserts = array();
}

0

@ जीडीपी के जवाब में जोड़ना

...
$columns = array('user_id', 'type', 'object', 'lvl', 'date');
$values  = array();
foreach ($batch as $row) {
    $array    = array(
        $row->user_id,
        $db->quote($row->type),
        $db->quote($row->object),
        $db->quote($row->lvl),
        $db->quote($row->date),
    );
    $values[] = implode(',', $array);
}
$query->insert($db->quoteName('#__activity_log'));
$query->columns($db->quoteName($columns));
$query->values($values);
...

क्या आप अपने उत्तर में उस मूल्य की व्याख्या कर सकते हैं जो पहले से ही @ जीडीपी के स्वीकृत उत्तर द्वारा कवर नहीं किया गया है? यह लगभग एक कोड-ओनली उत्तर है।
mickmackusa

यह दिखाता है कि प्रोग्राम के $valuesएक सरणी के साथ वेरिएबल को कैसे पॉप्युलेट किया जाए comma separated row strings, जिसमें बहुत समय की बचत होती है और त्रुटियों के लिए कम मार्जिन होता है, बजाय इसके कि कॉमा अलग किए गए स्ट्रिंग्स को बनाने के बजाय अपने उत्तर में या उस मामले के लिए भी सहमति दें।
मोहम्मद अब्दुल मुजीब

इस जानकारी को आपके उत्तर में पैक किया जाना चाहिए ताकि यह भविष्य के शोधकर्ताओं को शिक्षित कर सके।
mickmackusa

वैसे मैं इसे देख रहा हूं, बशर्ते कोड बहुत आत्म व्याख्यात्मक हो, हालांकि निश्चित रूप से इसमें सुधार के क्षेत्र हो सकते हैं, अगर आपको लगता है कि कृपया उत्तर को संपादित करने और बढ़ाने के लिए स्वतंत्र महसूस करें
मोहम्मद अब्दुल मुजीब

आपका कोड उन लोगों के लिए आत्म-व्याख्यात्मक है जो समझते हैं कि php / Joomla वाक्यविन्यास का क्या अर्थ है। आप अपने काम को निखारना पसंद नहीं करते? JSX पर (Stackoverflow से अधिक) पूरी तरह से उत्तर देने के लिए स्पष्टीकरण देना महत्वपूर्ण है क्योंकि जो लोग अभी वेब विकास में अपना कैरियर शुरू कर रहे हैं, उन्हें CMS द्वारा ऐसा करने के लिए मोहित किया जाता है। आपको महसूस होता है कि यहां सामग्री पोस्ट करने की बात शिक्षित करने के लिए है, है ना? मेरा मतलब है, मैं आपको अपना सर्वश्रेष्ठ उत्तर देने और जोखिम अर्जित करने के लिए प्रोत्साहित कर रहा हूं।
mickmackusa
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.