2012-05-14 4 views
1

다른 서버와 mysql 데이터베이스를 동기화/출력하는 스크립트가 있습니다.쉘 스크립트 mysql 출력 변환

쉘에서이 SQL 쿼리를 호출하는 방법을 알고 있습니다. 그러나이 스크립트의 출력을 php에서 shell 스크립트로 변환하여 아래에 표시된 형식 (기본적으로 값을 "|"과 일부 URL로 구분)을 유지할 수 있습니까?

$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"; 
       } 

감사

+1

쉘 스크립트는 데이터베이스와 쉽게 대화 할 수 없습니다. 그냥 PHP 스크립트를 쉘 스크립트 (위의'#!/usr/bin/php'를 추가하여 실행 가능하게 만드십시오.) –

+0

정말 큰 조언! 너무 평범한 내 인생을 만듭니다. – user1394013

답변

1

당신은 커맨드 라인에서 mysql을 전달하는 간단한 쿼리로 이러한 모든 연결을 수행 할 수 있습니다 :

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 

첫 번째 SET를 나는이 특정 형식의 출력은 다음과 같이 필요 , 성가신 CONCAT 함수를 사용하는 대신 SQL 표준 이중 파이프로 문자열을 조인 할 수 있도록 MySQL에서 concat 연산자로 파이프를 설정하십시오. 결과 세트는 SQL 쿼리에서 직접 문자열을 연결 한 것입니다. 이렇게하면 PHP 인터프리터를 설치할 필요없이 bash 스크립트에서이 명령을 실행할 수 있습니다 ...

+0

굉장한 조언, 심지어 havent 가능하다는 것을 알았다. 고마워. – user1394013