Mit bash mysql in Schleife abfragen

M

mopsy

Grünschnabel
Servus @all,

ich habe jetzt die ganze Nacht gekämpft, aber es will nicht wie ich mir das vorstelle.

Meine Tabelle:
Code:
id int(11) NOT NULL AUTO_INCREMENT,
userid smallint(4) NOT NULL,
email varchar(100) NULL,
joo tinyint(1) NOT NULL,
joo_db tinyint(2) UNSIGNED ZEROFILL NOT NULL,
joo_date int(10) NULL DEFAULT 1,
joo_folder varchar(30) NOT NULL,
gsa tinyint(1) NOT NULL,
gsa_db tinyint(2) UNSIGNED ZEROFILL NOT NULL,
gsa_date int(10) NULL DEFAULT 1,
gsa_folder varchar(30) NOT NULL,
PRIMARY KEY (id)
Darin die Werte die ich für automatisierte Updates brauche
1,1001,mail@example.com,1,01,1234567890,docs,1,05,1234567890,docs/example
So sollte das ganze laufen, das /bash Script rufe ich mit Parametern auf zB. joo wenn ich nur Werte für joo brauche
Code:
tmpifs="$IFS"
IFS="\n"
query1=($(echo "use ${mysqldb}; SELECT userid FROM ${table} WHERE ${1}=1;" | mysql -s -h ${mysqlhost} -u ${mysqluser} -p${mysqlpass}))
for i in ${query1[@]}
  do
    query2=($(echo "use ${mysqldb}; SELECT userid,email,${1},${1}_db,${1}_date,${1}_folder FROM ${table} WHERE ${1}=1 AND userid=${i};" | mysql -s -h ${mysqlhost} -u ${mysqluser} -p${mysqlpass}))
    # Was auch immer...
    echo mydb="${query2[3]}"
    # usw.
  done
IFS="$tmpifs"
Die Qeurys laufen wohl durch, die Werte im Array sind aber nicht in meiner Variablen. Kann mir bitte mal jemand auf die Sprünge helfen

Stephan
 
Probiers mal so (mit Backticks `):
Code:
query1=`($(echo "use ${mysqldb}; SELECT userid FROM ${table} WHERE ${1}=1;" | mysql -s -h ${mysqlhost} -u ${mysqluser} -p${mysqlpass}))`
 
Servus,

Danke, an den Backticks scheint es nicht zu liegen, sondern eher an meinem doppelten select. Ich habe das jetzt auf einen select reduziert, aber wie komme ich an die Anzahl der Datensätze, bzw. wie muss ich mysql_num_rows in bash verwenden? Alle notwendigen Datensätze habe ich jetzt in meinem query und kann mit ${query[0,1,2 usw.]} auf die Werte zugreifen, jetzt soll die Schleife nur noch alle Datensätze nacheinander durchlaufen, dafür brauche ich jetzt wohl die Anzahl mit mysql_num_rows.
 
Servus,

Danke, an den Backticks scheint es nicht zu liegen, sondern eher an meinem doppelten select. Ich habe das jetzt auf einen select reduziert, aber wie komme ich an die Anzahl der Datensätze, bzw. wie muss ich mysql_num_rows in bash verwenden? Alle notwendigen Datensätze habe ich jetzt in meinem query und kann mit ${query[0,1,2 usw.]} auf die Werte zugreifen, jetzt soll die Schleife nur noch alle Datensätze nacheinander durchlaufen, dafür brauche ich jetzt wohl die Anzahl mit mysql_num_rows.

Ich würde das so machen:
Code:
#!/bin/bash

table=""
mysqlhost=""
mysqluser=""
mysqlpass=""
mysqldb=""

echo "SELECT userid FROM ${table} WHERE ${1}=1;" | mysql -N -h ${mysqlhost} -u ${mysqluser} -p${mysqlpass} ${mysqldb} | while read USERID
do
    echo "SELECT userid,email,${1},${1}_db,${1}_date,${1}_folder FROM ${table} WHERE ${1}=1 AND userid=${USERID};" | mysql -Nt -h ${mysqlhost} -u ${mysqluser} -p${mysqlpass} ${mysqldb} | sed '/^[+-]*$/d;s/[ ]*|[ ]*/","/g;s/^",//;s/,"$//;s/\n//g' | while read DBZEILE
    do
        # Was auch immer...
        echo "mydb=${DBZEILE}"
        # usw.
    done
done
 
Zuletzt bearbeitet:

Ähnliche Themen

CentOS 5.8 –SQL Abfrage– HTML wird generiert und daraus müssen mehrere Mails versendet werden

JBidWatcher: Problem bei loading Auctions in Verbindung mit mySQL

Prblem mit zeilenweises auslesen von Datei und schreiben nach mysql

Akonadi startet nicht mehr

NagiosGrapher 1.7.1 funktioniert nicht

Zurück
Oben