Попытка сделать запрос при условии - PullRequest
0 голосов
/ 25 мая 2019

Я прочитал большинство решений здесь со схожими вопросами, и это не решило мою проблему, и я не могу найти в Интернете ничего, что могло бы мне помочь.

Я пытаюсь сделать запрос при условии, когда user_id = session user_id, но я получаю ошибку, когда я INNER join

неоднозначное имя столбца

для этого

public List<CartModelClass>getCarts1(){

    SQLiteDatabase db = getReadableDatabase();
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder();

    String[] sqlSelect = { "ID" , "user_id", "food_id", "quantity", "price", "origin", "destination","description","company_name","search_id"};

    String sqltable2 = "OrderDetails LEFT JOIN OrderDetails WHERE user_id LIKE '%%' ";

    qb.setTables(sqltable2);
    Cursor c = qb.query(db,sqlSelect, null, null ,null ,null ,null);

    final List<CartModelClass> result = new ArrayList<>();
    if (c.moveToFirst()) {
        do {
            result.add(new CartModelClass(
                    c.getString(c.getColumnIndex("user_id")),
                    c.getString(c.getColumnIndex("food_id")),
                    c.getString(c.getColumnIndex("quantity")),
                    c.getString(c.getColumnIndex("price")),
                    c.getString(c.getColumnIndex("origin")),
                    c.getString(c.getColumnIndex("destination")),
                    c.getString(c.getColumnIndex("description")),
                    c.getString(c.getColumnIndex("company_name")),
                    c.getString(c.getColumnIndex("search_id"))
            ));
        } while (c.moveToNext());
    }
    return result;
}

поэтому я изменил InnerJoin и сделал его просто таблицей where user_id like"%%", но я получил только последнего user_id, который добавил в корзину и показал все данные для всех пользователей

Я хочу показать только добавленную корзину для user_id = session user_id, поэтому я могу использовать ее здесь

loadListFood

private void loadListFood(){


sessionManager= new SessionManager(getActivity());
final Hashmap<String, String> user = sessionManager.getUserDetail();
user.get(USER_ID);

listdata = new Database(this.getContext.getCarts1());
for(CartModelClass order : listdata)
user_id = order.getUser_id


if(user.get(USER_ID).equals(user_id)){
listdata = new Database(this.getContext()).getCarts();


        adapter = new CartAdapter(listdata, this.getContext());
        recyclerView.setAdapter(adapter);


        int total = 0;
        for (CartModelClass order : listdata) {


            total += (Integer.parseInt(order.getPrice())) * (Integer.parseInt(order.getQuantity()));
            Locale locale = new Locale("en", "US");

            NumberFormat fmt = NumberFormat.getCurrencyInstance(locale);
            txtTotalPrice.setText(fmt.format(total));
        }
    }else {
        Toast.makeText(getContext(), "No Cart Added", Toast.LENGTH_LONG).show();

    }
}

1 Ответ

0 голосов
/ 25 мая 2019

Вы сами присоединяетесь к столу OrderDetails.
В этом случае вы должны установить псевдонимы для обеих копий таблицы, например:

OrderDetails as o1 LEFT JOIN OrderDetails as o2 ...

Теперь в предложении ON вы должны правильно указать имена столбцов, например:

ON o1.user_id = o2.something

Если вы этого не сделаете, вы получите это сообщение об ошибке, потому что имя столбца user_id может принадлежать любой из 2 копий таблицы.
Также:
Что такое session user_id? Это имя столбца?
Если это так, то проблема заключается в том, что он содержит пробел в своем имени.
Заключите его в квадратные скобки, так что statemnet должен быть:

OrderDetails as o1 LEFT JOIN OrderDetails as o2
ON o1.user_id = o2.[session user_id]
...