根据在另一个表中找到的数据更新条目

时间:2015-07-07 05:43:07

标签: php mysql sql

我对此完全是个菜鸟。基本上我正在尝试降低查询数量以缩短执行时间(获得100,000个查询,并且运行脚本需要永久)

让我说我有这样的事情:

UPDATE shop_tshirts SET categorie=XXXX WHERE design=12345

要查找XXXX的值,我必须这样做:

SELECT categorie FROM shop_designs WHERE design=12345

如何只使用一个查询才能做到这一点?目前我必须进行2次查询,因此进行此更改会使页面加载速度提高2倍。

5 个答案:

答案 0 :(得分:0)

UPDATE shop_tshirts SET categorie = d.categorie
FROM shop_designs d
WHERE design = 12345
AND d.design = 12345

这对你有用。 这假设“design”是一个不同的键(当你搜索WHERE design = 12345时只返回一行)

答案 1 :(得分:0)

不要在表shop_tshirts上设置类别 - 实际上完全删除了这个字段。

然后当你需要shop_tshirts表中的类别字段时,请加入shop_tshirts和类别表来获取它

e.g。

SELECT * FROM
    shop_tshirts
JOIN
    categorie ON categorie.design=shop_tshirts.design
WHERE
    design=12345

答案 2 :(得分:0)

马上把他们全部清理干净!

UPDATE shop_tshirts t
JOIN shop_designs d
ON d.design = t.design 
SET t.categorie = d.categorie

答案 3 :(得分:0)

UPDATE shop_tshirts SET categorie=XXXX WHERE design=(SELECT categorie FROM shop_designs WHERE design=12345)

或:

UPDATE shop_tshirts AS t1
    LEFT JOIN shop_designs AS t2 ON t2.design=t1.design
SET t1.categorie=t2.categorie
WHERE t1.design=12345

但我不认为你的问题是在查询当然直到我能看到你的数据库和你的脚本我不能告诉但是尝试在两个表中为列设计添加索引

答案 4 :(得分:0)

根据在另一个表中找到的数据更新条目

public class ViewPagerAdapter extends FragmentPagerAdapter {

    final int PAGE_COUNT = 10;
    // Tab Titles
    private String[] tabs = { "Tables", "Water", "Fan"};
Context context;

    public ViewPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public int getCount() {
        return PAGE_COUNT;
    }

    @Override
    public Fragment getItem(int index) {

        switch (index) {
        case 0:
            // Top Rated fragment activity
            return new TableFragment();
        case 1:
            // Games fragment activity
            return new WaterFragment();

        case 2:
            // Movies fragment activity
            return new FancoolerFragment();

}

        return null;
}
@Override
    public CharSequence getPageTitle(int position) {
        return tabs[position];
    }
@Override
    public CharSequence getPageTitle(int position) {
        return tabs[position];
    }