Не получается получить данные с удаленной базы по значениюID
Не получается получить данные с удаленной базы по значениюID
Друзья на днях наткнулся к такой проблеме, вОоБражение просто не хватает, сообразить. Допустим в удаленной базе есть my_table, строки id,text_id,text,image. Требуется получить данные по значению text_id . Например я говорю text_id=8 и должен получить значение image,text где text_id=8 (таких много в таблице, это же не ауто-инкремент), а получаю .......
«Life is too short to spend rewriting code»
Re: Не получается получить данные с удаленной базы по значен
Т.е. нужно угадать какой конкретно запрос вы делаете и что там за таблица вообще ?mdzht писал(а):Друзья на днях наткнулся к такой проблеме, вОоБражение просто не хватает, сообразить. Допустим в удаленной базе есть my_table, строки id,text_id,text,image. Требуется получить данные по text_id по значению, а я получаю все значения. Например я говорю text_id=8 и должен получить значение image,text где text_id=8 (таких много в таблице, это же не ауто-инкремент), а получаю .......
 Нужно просто делать запрос, есть полезная штука для того, чтобы пописать запросы: http://sql.learncodethehardway.org/book/
варриантов много, зависит от вашей таблицы и желаний, к примеру:
[syntax=sql]SELECT user_, image, text, MAX(rank) AS ranking FROM table_ GROUP BY user_ HAVING raking>10 LIMIT 1;[/syntax]

Re: Не получается получить данные с удаленной базы по значен
За это отдельное спасибоaltwin писал(а):Нужно просто делать запрос, есть полезная штука для того, чтобы пописать запросы: http://sql.learncodethehardway.org/book/
Все намного проще, угадать нет необходимости, я подсказываю, дай мне text и image где text_id=8. Значение я должен передать. Не много запутался.altwin писал(а): Т.е. нужно угадать какой конкретно запрос вы делаете и что там за таблица вообще ?
|id |text_id| text | image |
__________________________
|1 | 8| text1 |сылка1|
__________________________
|2 | 5| text2 |сылка2|
__________________________
|3 | 8| text3 |сылка3|
[syntax=php]
$query = "Select * FROM my_table";
$post = array();
$post["text_id"] = $row["text_id"];[/syntax]
«Life is too short to spend rewriting code»
Re: Не получается получить данные с удаленной базы по значен
Select * - как раз и возвращает все записи. Нужно просто сделать [syntax=sql]SELECT text, image FROM my_table WHERE text_id=8[/syntax]
 Если таких записей много(где text_id = 8), а нужно возвращать только одну, то два варрианта, либо добавить в базу дополнительную колонку по которой делать фильтр, либо, если достаточно просто обрезать вывод, добавить LIMIT 1 в запрос.
 P.S. к примеру добавить дату публикации статьи/картинки и дополнительный фильтр по ней. Можно сколько угодно фильтров делать = / < / > и т.д. главное чтобы структура таблицы это позволяла. В этой таблице нет варриантов, кроме как ставить LIMIT или добавлять конкретный id в запрос.
 С другой стороны, вполне возможно получить все строки где text_id=8 и уже в java коде отфильтровать( но вообще рекомендуется по максимум использовать встроенные функции БД, хотя я не совсем уверен, что там в SQLite есть
).
 Если таких записей много(где text_id = 8), а нужно возвращать только одну, то два варрианта, либо добавить в базу дополнительную колонку по которой делать фильтр, либо, если достаточно просто обрезать вывод, добавить LIMIT 1 в запрос.
 P.S. к примеру добавить дату публикации статьи/картинки и дополнительный фильтр по ней. Можно сколько угодно фильтров делать = / < / > и т.д. главное чтобы структура таблицы это позволяла. В этой таблице нет варриантов, кроме как ставить LIMIT или добавлять конкретный id в запрос.
 С другой стороны, вполне возможно получить все строки где text_id=8 и уже в java коде отфильтровать( но вообще рекомендуется по максимум использовать встроенные функции БД, хотя я не совсем уверен, что там в SQLite есть

Re: Не получается получить данные с удаленной базы по значен
Это и есть решение. решил, спсaltwin писал(а):Select * - как раз и возвращает все записи. Нужно просто сделать [syntax=sql]SELECT text, image FROM my_table WHERE text_id=8[/syntax]
«Life is too short to spend rewriting code»
Re: Не получается получить данные с удаленной базы по значен
Не много модифицировал таблицы. Нужно добавить запись в таблицу. Я заранее не знаю куда нужно записать. Это может быть text1,text2,text3. В java есть переменная text который содержит один из трех(text1,text2,text3) значений.altwin писал(а):Select * - как раз и возвращает все записи. Нужно просто сделать [syntax=sql]SELECT text, image FROM my_table WHERE text_id=8[/syntax]
Как записать значение правильно в таблицу?
[syntax=php]switch("text1" || "text2" || "text3"){
case "text1"
$query = "INSERT INTO comments ( text_id, username, title, text1)
VALUES ( :text_id, :user, :text1) ";
break;
case "text2"
$query = "INSERT INTO comments ( text_id, username, title, text2)
VALUES ( :text_id, :user, :text2) ";
break;
case "text3"
$query = "INSERT INTO comments ( text_id, username, title, text3)
VALUES ( :text_id, :user, :text3) ";
break;
default:break;
}
[/syntax]
Что то в этом роде?
таблица такая
[img]http://webfile.ru/94f0235556f683d992af07bd1e3ad5e9[/img]
Как проверять какой из строк null, если имеется null то запись вставить сначала именно туда. Если нет строк со значением null,н-р
[img]http://webfile.ru/b7ff4c364a95530d14e307ffea78d8f4[/img]
То записать, на новую строку
[img]http://webfile.ru/c2e33ef91af827218f8a98f220696483[/img]
Последний раз редактировалось mdzht 23 фев 2014, 15:37, всего редактировалось 1 раз.
«Life is too short to spend rewriting code»
Re: Не получается получить данные с удаленной базы по значен
Фильтровать в базе - никак, т.к. сортировка в SQL не возможна. Таблицы - это "множества" и они не имеют оператора сортировки вроде ORDER BY. Сортировать можно только запросы. Т.е. в данном случае используя кучу встроенных функций проверки на null (IS NOT NULL, ISNULL(), NVL(), IFNULL(), COALESCE()). Нужно делать SELECT используя ORDER BY, получать все строки в которых null - выполнять INSERT туда и далее уже делать оставшиеся INSERT.mdzht писал(а):Не много модифицировал таблицы. Нужно добавить запись в таблицу. Я заранее не знаю куда нужно записать. Это может быть text1,text2,text3. В java есть переменная text который содержит один из трех(text1,text2,text3) значений.altwin писал(а):Select * - как раз и возвращает все записи. Нужно просто сделать [syntax=sql]SELECT text, image FROM my_table WHERE text_id=8[/syntax]
Как записать значение правильно в таблицу?
[syntax=php]switch("text1" || "text2" || "text3"){
case "text1"
$query = "INSERT INTO comments ( text_id, username, title, text1)
VALUES ( :text_id, :user, :text1) ";
break;
case "text2"
$query = "INSERT INTO comments ( text_id, username, title, text2)
VALUES ( :text_id, :user, :text2) ";
break;
case "text3"
$query = "INSERT INTO comments ( text_id, username, title, text3)
VALUES ( :text_id, :user, :text3) ";
break;
default:break;
}
[/syntax]
Что то в этом роде?
таблица такая
|id|text_id|user|text1|text2| text3 |
|1 | 8| User1|Вах-вах1|Вах-Вах2| null|
|2|5|User1|null|Вах-вах3|Вах-вах4|
|3|8|User1|Вах-вах5|null|Вах-вах6|
Как проверять какой из строк null, если имеется null то запись вставить сначала именно туда. Если нет строк со значением null,н-р
|id|text_id|user|text1|text2|text3 |
|1 | 8| User1|Вах-вах1|Вах-Вах2| Вах-Вах3|
|2|5|User1| Вах-Вах4|Вах-вах5|Вах-вах6|
|3|8|User1|Вах-вах7| Вах-Вах8|Вах-вах9|
То записать, на новую строку
|id|text_id|user|text1|text2|text3 |
|1 | 8| User1|Вах-вах1|Вах-Вах2| Вах-Вах3|
|2|5|User1| Вах-Вах4|Вах-вах5|Вах-вах6|
|3|8|User1|Вах-вах7| Вах-Вах8|Вах-вах9|
|3|8|User1|null|null|Вах-вах10|![]()
![]()
![]()
![]()
P.S. как варриант можно конечно использовать кластеризацию и индексировать место на диске в которое идет запись, далее сортировать по null в значении, но во первых я не совсем представляю себе кластеризацию в SQLIte и тем более, как это сделать в Android. Да и стоимость операции будет смертельна... SQLIte вообще не расчитана на оперции UPDATE и оставлять null в надежде что -то "дописать" опять таки не хорошо для производительности. Потому проще сменить архитектуру и если нужно добавить запись в строку, делать это отдельной новой строкой. т.е. вместо text1, text2, text3, должно быть три таблицы, либо логичнее добавлять связи. В общем не нужно пытаться решить нелинейное уравнение на пальцах. т.е. "text1, text2, text3" - это три таблицы связанные ONE TO MANY с user

Re: Не получается получить данные с удаленной базы по значен
Архитектуру изменил, задачу решил! сделал именно такaltwin писал(а): P.S. как варриант можно конечно использовать кластеризацию и индексировать место на диске в которое идет запись, далее сортировать по null в значении, но во первых я не совсем представляю себе кластеризацию в SQLIte и тем более, как это сделать в Android. Да и стоимость операции будет смертельна... SQLIte вообще не расчитана на оперции UPDATE и оставлять null в надежде что -то "дописать" опять таки не хорошо для производительности. Потому проще сменить архитектуру и если нужно добавить запись в строку, делать это отдельной новой строкой. т.е.либо логичнее добавлять связи. В общем не нужно пытаться решить нелинейное уравнение на пальцах. т.е. "text1, text2, text3" - это три таблицы связанные ONE TO MANY с userвместо text1, text2, text3, должно быть три таблицы,
вместо text1, text2, text3, должно быть три таблицы,
«Life is too short to spend rewriting code»