LINUX.ORG.RU

Bash + MySQL поля с несколькими словами

 ,


1

3

Курю маны уже пол дня и никак не могу въехать Нужно из таблицы выбрать поля, некторые из которых могут содержать значения из нескольких слов. Как корректно это сделать?

result=`mysql -Bse "SELECT title, type, DATE_FORMAT(date,'%H:%i') from table where id=$id" --user="$user" --password="$pwd" $dbName`
n=0
for i in $result; do
  out[$n]=$i
  $n=$n+1
done;
создает массив, каждый элемент которого = отдельному слову. А если у меня в поле 'title' хранится, например, «два слова», как создать один элемент массива, а не два «два» и «слова»?



Последнее исправление: RJ45 (всего исправлений: 3)

плохо маны куришь. MySQL тут причем? она тебе возвращает поле+таб+поле+таб а ты потом циклом «слова» отдельные перебираешь на баше. Интерпретируй result по-другому и будет тебе другой результат. На крайняк - юзай CONCAT и подготовь такую строку, которую сможешь разобрать потом.

BaBL ★★★★★
()
mysql> create table test(title varchar(10));
Query OK, 0 rows affected (0.08 sec)

mysql> insert into test set title = "TITLE1";
Query OK, 1 row affected (0.00 sec)

mysql> insert into test set title = "TITLE2";
Query OK, 1 row affected (0.00 sec)

mysql> select title from test;
+--------+
| title  |
+--------+
| TITLE1 |
| TITLE2 |
+--------+
2 rows in set (0.00 sec)

mysql> select concat('"', title, '"') from test;
+-------------------------+
| concat('"', title, '"') |
+-------------------------+
| "TITLE1"                |
| "TITLE2"                |
+-------------------------+
2 rows in set (0.00 sec)

mysql> 
damnemall
()

Вариант «через жопу»:

result=`mysql -Bse "select title from test" -uroot -proot rj45 | sed 's/ /%/g'`
for i in $result; do echo $i | sed 's/%/ /g'; done
$ bash 1.sh
TITLE1
TITLE2
TITLE 3
damnemall
()

Результат возвращается строками?

while read ; do ; done ?

sin_a ★★★★★
()

Не уверен, но может попробывать IFS='\n'

FreeBSD ★★★
()
IFS=$'\t\n'
out=( `mysql -Bse "SELECT title, type, DATE_FORMAT(date,'%H:%i') from table where id=$id" --user="$user" --password="$pwd" $dbName` )
IFS=$' \t\n'
for (( i=0 ; i<${#out[*]}; i++ )) ; do 
   echo $i "${out[i]}" 
done
[\code]
mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.