2012-05-14 5 views
1

J'ai un script pour synchroniser/sortir ma base de données mysql avec un autre serveur.script shell mysql transformation de sortie

Je sais comment appeler cette requête SQL en shell. Cependant, est-il possible de convertir la sortie de ce script de php en script shell pour garder le format indiqué ci-dessous (essentiellement les valeurs séparées par "|" et certaines URL)? i besoin de la sortie dans ce format spécifique ci-dessous:

$sql=mysql_query("SELECT a, b, c, d, e FROM tableA LEFT JOIN tableB USING (a)"); 

while ($res=mysql_fetch_array($sql)) 
       { 
       echo $res['a']."|".$res['b']."|".$res['c']."|http://www.url.com/".$res['e']."/".$res['a'].".php|http://www.url.com/link/".urlencode($res['b'])."\n"; 
       } 

grâce

+1

Les scripts shell ne vous faciliteront pas la tâche de parler à une base de données. Transformez votre script php en un script shell (ajoutez '#!/Usr/bin/php' en haut et rendez-le exécutable.) –

+0

vraiment de bons conseils trop marc! Rend ma vie beaucoup plus simple :) – user1394013

Répondre

1

Vous pouvez faire toutes ces concaténation avec une simple requête transmise à mysql en ligne de commande:

mysql -u username -ppassword -D dbname << eof 
SET sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT'; 
SELECT a || '|' || b || '|' || c || '|http://www.url.com/' || e || '/' || a || '.php|http://www.url.com/link/' || b AS joinedColum FROM tableA LEFT JOIN tableB USING (a); 
eof 

Le premier SET , définissez le canal comme opérateur de concaténation dans MySQL pour pouvoir joindre une chaîne avec un double canal standard SQL au lieu d'utiliser la fonction ennuyante CONCAT ... Après cela, le jeu de résultats est une concaténation de chaînes directement dans la requête SQL. De cette façon, vous pouvez exécuter cette commande à partir d'un script bash sans avoir besoin d'avoir un interpréteur php installé ...

+0

super conseils, havent même Je savais que c'était possible. Merci beaucoup. – user1394013