2012-11-20 2 views
0

2 일 동안이 작업을 수행하면서 모든 것을 읽고 내 대답을 얻을 수 없었습니다. 이것에 대해 미리 감사드립니다 !!! 내가 몇 테이블을 조인에서 쿼리를에는 여전히 문제가 있습니다. 열 개수가 행 1의 값 개수와 일치하지 않습니다. mysql 및 php

, 그것은 다음은 제가 찾고 있어요 출력 나의 선택

mysql_select_db($database_dbConnect, $dbConnect); 
$query_rsMale = "SELECT r.points, r.license, l.acaNo, l.firstName, l.lastName, 
l.cxage, l.cxcat,l.cxteam, l.city, l.state, l.gender  FROM rankingsM r INNER 
JOIN field f ON r.license=f.USAC_No INNER JOIN racers l ON l.usacNo=f.USAC_No 
ORDER BY points"; 
$rsMale = mysql_query($query_rsMale, $dbConnect) or die(mysql_error()); 
$row_rsMale = mysql_fetch_assoc($rsMale); 
$totalRows_rsMale = mysql_num_rows($rsMale); 

echo "<br> This is num " . $totalRows_rsMale . "<br>"; 

내가 다른 페이지에 csv 파일이 다운로드하고 그것을 잘 작동합니다. 그런 다음 배열을 가져 와서 implode를 가진 다른 배열에 넣습니다.

$newData = implode(",",$row_rsMale); 
$newData = mysql_real_escape_string($newData); 

echo "<br> This is newdata <br>". $newData; 

여기에서 열이 일치하지 않는 오류가 발생합니다. 일치하는 열을 검사하고 데이터 형식을 검사 한 결과 일치합니다.

$insertSQL ="INSERT INTO ranking (points, usacNo, acaNo, firstName, lastName, 
cxage, cxcat, cxteam, city, state, gender) 
SELECT ('$newData')"; 

$Result1 = mysql_query($insertSQL, $dbConnect) or die(mysql_error()); 

echo "<br>Insert complete!<br>"; 

다음 나는

$rankingSQL ="Select * from ranking"; 

$result = mysql_query($rankingSQL, $dbConnect) or die(mysql_error()); 
echo "<table><tr>"; 
for($i = 0; $i < mysql_num_fields($result); $i++) { 
$field_info = mysql_fetch_field($result, $i); 
echo "<th>{$field_info->name},</th>"; 
} 

이 전에 22

이 newData의 인이 납입입니다 삽입되어 내 웹 사이트 이 내 페이지에 표시되는 것입니다 컬럼의 표시를했다 185.34,362355,4174, Shawn, Lortie, 47,2, 랠리 스포츠 사이클링 팀, BOULDER, CO, M points, usacNo, acaNo, 이름, 성, cxage, cxcat, cxteam, 도시, 주, 성별은 (내가 쉽게 읽을 컬럼에 쉼표를 추가했다.) 나는` 동안의 ($ L =로 MYSQL_ASSOC ($ 결과)) 로 되돌아가는 결국 열 수는 1 행

에서 값의 수를 일치하지 않습니다 PHP는 데이터와 함께이 확장되면

$insertSQL ="INSERT INTO ranking (points, usacNo, acaNo, firstName, lastName, 
            cxage, cxcat, cxteam, city, state, gender) 
      SELECT ('$newData')"; 

, 당신은 다음과 같은 SQL 문이됩니다 : {

{ 
    $insertSQL = sprintf("INSERT INTO ranking (points, usacNo, acaNo, firstName, 
lastName, cxage, cxcat, cxteam, city, `state`, gender) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)", 
        GetSQLValueString($l ['points'], "double"), 
        GetSQLValueString($l ['license'], "int"), 
        GetSQLValueString($l ['acaNo'], "int"), 
        GetSQLValueString($l ['firstName'], "text"), 
        GetSQLValueString($l ['lastName'], "text"), 
        GetSQLValueString($l ['cxage'], "int"), 
        GetSQLValueString($l ['cxcat'], "int"), 
        GetSQLValueString($l ['cxteam'], "text"), 
        GetSQLValueString($l ['city'], "text"), 
        GetSQLValueString($l ['state'], "text"), 
        GetSQLValueString($l ['gender'], "text")); 

    $Result1 = mysql_query($insertSQL, $dbConnect) or die("<br>Error is " . mysql_error()); 
}` 
+0

실제 데이터 값에 쉼표가 있습니까? 그리고 당신은 실제로 fputcsv()와 fgetcsv()와 같은 내장 함수를 사용하여 CSV 파일을 작성하고 읽어야합니다. –

+0

다른 페이지에서했던 것처럼,이 페이지는 CSV 파일에 쓰지 않고 다른 테이블에 삽입하기위한 것입니다. . 복잡한 참여로 원하는 데이터를 얻었습니다. – Bodine

+0

실제 데이터 값에는 쉼표가 없습니다. – Bodine

답변

0

나는 문제는 다음 문이라고 생각

INSERT INTO ranking (points, usacNo, acaNo, firstName, lastName, 
        cxage, cxcat, cxteam, city, state, gender) 
SELECT ('185.34,362355,4174,Shawn,Lortie,47,2,Rally Sport Cycling Team,BOULDER,CO,M') 

SELECT는 하나의 필드를 반환합니다. 따라서 11 개의 필드가있는 INSERT 문에 하나의 필드를 입력하면 오류가 발생합니다. 다음 초래한다

$newData = implode("','",$row_rsMale); 
$insertSQL = "INSERT INTO ranking (...) VALUES ('$newData')"; 

이 :

당신은 아마 무언가 같이 올바르게 삽입을 형성 할 필요가 인용 부호와 숫자 인수를 둘러싼로이 최적이 아닌

INSERT INTO ranking (...) VALUES ('185.34','362355','4174','Shawn','Lortie','47','2','Rally Sport Cycling Team','BOULDER','CO','M') 

, 하지만 아마도 데이터베이스가 변환을 수행합니다.

CSV 단계를 거칠 필요가없는 경우 다음과 같이 삽입합니다.

INSERT INTO ranking (points, usacNo, acaNo, firstName, lastName, 
        cxage, cxcat, cxteam, city, state, gender) 
(SELECT r.points, r.license, l.acaNo, l.firstName, l.lastName, 
        l.cxage, l.cxcat,l.cxteam, l.city, l.state, l.gender 
FROM rankingsM r 
INNER JOIN field f ON r.license=f.USAC_No 
INNER JOIN racers l ON l.usacNo=f.USAC_No 
ORDER BY points) 

하나의 연산이 모든 작업을 수행하고 삽입 된 행 수를 반환합니다.데이터를 다시 입력하기 위해 모든 데이터를 다시 PHP로 가져 오지 않으므로 데이터베이스/앱 관점에서 볼 때 매우 논리적입니다.

+0

좋지 않았습니다. 이 선택 쿼리를 가져 와서 phpAdmin 내에서 직접 sql 데이터베이스를 사용하거나 csv 파일을 만들려면이 데이터베이스를 사용하십시오. 여기에 복사하여 다른 작업 파일에서 붙여 넣으면 두 번째로 오타가 없는지 확인합니다. 오류가 있음을 알립니다. SQL 구문에 오류가 있습니다. 근처 사용할 수있는 권리 구문에 대한 MySQL 서버 버전에 해당하는 설명서를 확인 'r.license 필드 f를 가입 rankingsM R INNER FROM을 = f.USAC_No INNER는 레이서의 리터 가입'당신이 삽입을 시도처럼 3 – Bodine

+0

는 소리 줄에서를 선택/? 업데이트 된 코드를 보여줄 수 있습니까? – schtever

+0

삽입/삽입을하고 싶었습니다. 제가 생각한 맨 위에 그것을 업데이트했습니다. 이것에 익숙하지 않아. – Bodine

관련 문제