একাধিক রেকর্ডগুলি jDatbox দিয়ে একবারে inোকানো যেতে পারে?


11

একটি লুপ ব্যবহার না করে, জুমলা ডাটাবেস ফাংশনগুলি কি এসকিউএল স্টেটমেন্টটি তৈরি করতে পারে?

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

এ ডক্স ডাটাবেসের JDatabase ব্যবহার অ্যাক্সেস করা , লেনদেন পড়ুন এবং এসকিউএল বা বস্তু, কিন্তু উভয় ক্ষেত্রে একাধিক মান কোনো উল্লেখ ব্যবহার করে।

উত্তর:


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);
...

আপনি নিজের উত্তরে এমন মানটি ব্যাখ্যা করতে পারবেন যা @ জিডিপির গৃহীত উত্তরের দ্বারা ইতিমধ্যে আচ্ছাদিত নয়? এটি প্রায় একটি কোড-উত্তর উত্তর।
মিকম্যাকুসা

এটি দেখায় যে কীভাবে প্রোগ্র্যাম্যাটিকভাবে $valuesএকটি অ্যারে দিয়ে ভেরিয়েবলটিকে comma separated row stringsপপুলেট করা যায় যা অনেক সময় সাশ্রয় করে এবং ত্রুটিগুলির জন্য কম মার্জিন থাকে, ম্যানুয়ালি তার উত্তর হিসাবে কমা বিচ্ছিন্ন স্ট্রিংগুলি তৈরি করার চেয়ে বা এমনকি এই বিষয়টির জন্য যুক্তিযুক্ত করার চেয়ে।
মোহাম্মদ আবদুল মুজিব

এই তথ্যটি আপনার উত্তরে প্যাকেজ করা উচিত যাতে এটি ভবিষ্যতের গবেষকদের শিক্ষিত করতে পারে।
মিকম্যাকুসা

আমি যেভাবে দেখছি, প্রদত্ত কোডটি বেশ স্ব-বর্ণনামূলক, যদিও অবশ্যই উন্নতির ক্ষেত্র থাকতে পারে, আপনি যদি মনে করেন তবে উত্তরটি সম্পাদনা এবং উন্নত করতে নির্দ্বিধায় পড়ুন
মোহাম্মদ আবদুল মুজিব

আপনার পিএইচপি / জুমলা সিনট্যাক্স বলতে কী বোঝে তাদের জন্য আপনার কোডটি স্ব-ব্যাখ্যাযোগ্য। আপনি আপনার নিজের কাজ পরিমার্জন করতে চান না? জেএসএক্সে (স্ট্যাকওভারফ্লোর চেয়ে বেশি) পুরোপুরি উত্তর ব্যাখ্যা মেগা-গুরুত্বপূর্ণ কারণ যে সমস্ত লোকেরা কেবল ওয়েব বিকাশে ক্যারিয়ার শুরু করছেন তারা সিএমএসের দ্বারা প্ররোচিত হন। আপনি বুঝতে পেরেছেন যে এখানে লিখিত বিষয়বস্তু পোস্ট করার বিষয়টি শিক্ষিত করা, তাই না? আমার অর্থ, আমি আপনাকে সেরা উত্তর এবং ঝুঁকিপূর্ণ উপার্জন পোস্ট পোস্ট করতে উত্সাহ দিচ্ছি am
মিকম্যাকুসা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.