2013-05-04 4 views
0

두 개의 데이터베이스가 있습니다. 첫 번째 파일에는 업로드 문서의 목록과 업로드 한 날짜 및 만료 날짜가 들어 있습니다. 이것은 내파를 사용하는 사람의 각 등급을 나타내는 숫자로 저장됩니다. 그래서 열 이름 'foagrade'는 10,11,12 번째 행에 있습니다. 두 번째 데이터베이스는 성적 목록이고 ID는 예 : 10 = 관리자, 11 = HR 등입니다. 왼쪽 조인과 기본 html 테이블을 사용하여 쿼리를 표시합니다.왼쪽 분할을 사용하면서 문자열을 분할합니다.

$result = mysqli_query($con, 
"SELECT UPLOAD.id, UPLOAD.title, UPLOAD.faoGrade,UPLOAD.faoLocation, UPLOAD.date, UPLOAD.expiry, GRADE.ID, GRADE.GRADE as GR, GRADE.id 
FROM UPLOAD 
LEFT JOIN GRADE ON 
UPLOAD.faoGrade=GRADE.ID 
where owner=$user"); 
echo "<table id='previous'> 
<tr> 
<th>Title/Document name:</th> 
<th>For attention of Grade</th> 
<th>For Location</th> 
<th>date</th> 
<th>Date expires</th> 
<th>Delete this briefing</th> 
</tr>"; 

while($row = mysqli_fetch_array($result)) 
    { 
    $id=$row['id']; 
    echo "<tr>"; 
    echo "<td>" . $row['title'] . "</td>"; 
    echo "<td>" . $row['GR'] . "</td>"; 
    echo "<td>" . $row['foaLocation']."</td>"; 
    echo "<td>" . date("D, d M Y ",($row['date'])); 
    echo "<td>" . date("D, d M Y ",($row['expiry'])); 
    echo "<td><a href=pages/login/upload_delete.php?item=".$id.">delete</a></td> "; 
    echo "</tr>"; 
    } 
echo "</table>"; 

쿼리는 모든 세부 사항을 보여줍니다 만 열 faograde (MANAGER)하지 (11) 또는 (12) 가 어떻게 폭발 할 것 또는 분할이에 저장된 첫 번째 등급이다? 따라서이 열의 각 숫자에 대해 성적 이름이 표시됩니다. 또한 'faoLocation'열에 대해서도 동일한 작업을 수행해야하지만 한 번에 한 가지 문제 만 해결해야합니다.

+1

정규화가 옵션이 아닙니까? – Strawberry

+0

아무 생각도 딸기는 그것을 결코 사용하지 않았다, 나는 당신을 알리고 조사 할 것이다. 감사합니다 –

+1

또한, 당신은 grade.id를 두 번 선택하고 결과 세트에는 * id *라는 세 개의 * 열이 있습니다. 이렇게하면 응용 프로그램 수준 코드가 혼동됩니다. – Strawberry

답변

0

이 테이블 normalized해야하지만, 당신이 이미 가지고있는 당신은 다음과 같이 수행 할 수 있습니다

SELECT UPLOAD.id as uploadID, 
UPLOAD.title, 
UPLOAD.faoLocation, 
UPLOAD.date, 
UPLOAD.expiry, 
GRADE.ID as gradeID1, 
GRADE.GRADE as GR, 
GRADE.id as gradeID2 FROM UPLOAD, GRADE 
WHERE 
FIND_IN_SET(gradeID2,UPLOAD.faoGrade) 
and UPLOAD.owner=$user; 

업데이트 가 여기에 SQL Fiddle의를.

id & ID이라는 여러 열이 있다는 것이 다소 혼란 스럽습니다. grade_ID 또는 user_ID과 같은 직관적 인 이름을 지정하는 것이 가장 좋습니다. 정규화 관점에서 쉼표로 구분 된 열 (이 데이터가 데이터베이스에 입력되는 방식에 따라 다름) 대신 관계형 테이블을 사용할 수 있습니다. 여기에 video about normalization이 있습니다.

+1

FIND_IN_SET은 -1이므로 -1이 작동하지 않습니다. 그러나 정상화를 권하는 +1! ;-) – Strawberry

+0

사실 혼란, 정상화를 이해하기 시작했습니다. 그것은 많은 레코드를 가질 가능성이 있으므로 이미 시작되었습니다. 포인터 주셔서 감사합니다 –

+0

@Strawberry 바이올린을 추가했습니다. 당신이 옳았. FIND_IN_SET을 사용할 필요가 없습니다. 또한 결과를 보여주기 위해 IN 문도 포함 시켰습니다. true를 반환하지만 첫 번째 쉼표에서 멈 춥니 다. –

관련 문제