2012-11-25 2 views
0

프로그래밍에 대한 첫 번째 시도에서는 고객 정보를 입력하고 주문에 대한 정보를 저장하기 위해 PHP와 MySQL로 간단한 webapp를 만들고 있습니다.두 테이블의 정보를 한 번에 두 가지 형식으로 읽음

지금까지 고객 정보, 해당 정보를 편집하는 페이지 및 다른 고객을 보여주는 다른 페이지를 입력하는 양식을 만들었습니다. 모두 잘 작동합니다.

그러나 나는 다음 단계를 구현하려고 할 때 그루터기를 만났습니다.

3 개의 열이있는 editcustomers 페이지가 있습니다.

  • 열 1은 고객 정보가 포함 된 양식으로 을 편집 할 수 있습니다.
  • 열 2는 주문한 제품의 수를 표시하고 주문한 제품 수를 나타냅니다.
  • 열 3은 지금까지 지불 한 총액과 총 금액을 표시합니다.

페이지에 대한 코드는 내가 현재 가지고 :

<html> 
<?php 
$id = $_GET['id']; 
require_once('connect.php'); 
$sth = $dbh->query("SELECT * FROM customers where id = '$id'"); 
$sth->setFetchMode(PDO::FETCH_ASSOC); 
?> 

<div id="main"> 
    <div id="left"> 
    <form name="myForm" action ="process.php" method ="post" > 
    <?php while($row = $sth->fetch()){ ?> 
    <p><input type = "hidden" name ="id" value="<?php echo $row["id"] ?>"/> 
    <p><input type = "text" name ="firstName" size ="30" value=" <?php echo $row["firstName"]?>"/> 
    <p><input type = "text" name ="lastName" size ="30" value="<?php echo $row["lastName"]?>"/> 
    <p></p> 
    <input type="submit" value="Update" /> 
    <?php }?> 
    </div> 

    <div id="mid"> 
    <p>Amount owed<br /> 
    <input type = "text" name ="moneyOwed" size ="30" /></p> 
    <input type="submit" value="Pay" /> 
    <p>Number of aaaa<br /> 
    <input type = "text" name ="numAaa" size ="30" /></p> 
    <p>Number of bbbb<br /> 
    <input type = "text" name ="numBbb" size ="30" /></p> 
    <p> 
    <input type="submit" value="Update" /> 
    </div> 

    <div id="right"> 
    <b>Total Balance</b> 
    <p> Money owed: </p> 
     <p> aaa total: </p> 
    <p> bbb total: </p> 
    <p> Total: </p> 
    <input type = "text" name ="pay" size ="20" /></p> 
    <input type="submit" value="Make Payment" /> 
    </div> 
<?php 
$dbh =null; 
?> 
</body> 
</html> 

나는 다음과 같은 데이터베이스 구조를 가지고 :

  • 고객 테이블, 이름 등의 기본 정보, LASTNAME 등과 함께를 id 필드.
  • 제품 표에는 여러 제품이 나열되어 있으며 각 제품의 비용을 포함하는 행은 1 행뿐입니다.
  • 구매 테이블의 ID 필드로, 각 제품의 양을 보여주는 numProductA, numProductB 같은 필드는, 내가 데 문제는 내 editcustomerspage에, 내가 읽고 데이터베이스 쿼리를 가지고있다

를 주문 customer 테이블의 정보에서 첫 번째 열의 양식 필드를 채우고 별도의 쿼리를 사용하여 함수가 선택된 경우이를 업데이트합니다.

양식을 차별화하기 위해 숨겨진 필드를 사용할 수 있으므로 두 번째 양식을 업데이트해도 문제가 없지만 Customers 테이블과 Purchases 테이블에서 정보를 읽는 방법을 잘 모르겠습니다. 두 번째 양식 ..

일부 문제는 해당 고객이 아직 주문을하지 않은 경우 구매 표가 비어있을 수 있다는 것입니다.

구매 테이블을 없애고 내 문제를 해결할 사용자 테이블에 필드를 집어 넣는 것을 고려하고있었습니다. 일반적으로 나쁜 습관이라고 생각합니다.

제품은 응용 프로그램에서 수정되며 변경되지 않습니다. 그럼에도 불구하고 열 이름 비용과 이름 및 각 제품을 기록으로하는 것이 더 좋을까요?

이 문제를 해결하기 위해 어떤 방법을 사용할 수 있습니까?

+0

이 질문이이 사이트에 너무 광범위하지 않기를 바랍니다. 질문이 부적절한 경우 사과드립니다. –

답변

1

numProductA, numProductB 열 때문에 현재 수행중인 작업조차도 나쁜 습관으로 간주됩니다. 1000 개의 제품이 있고 사용자가 모든 제품과 다른 금액을 주문하면 어떻게됩니까? 이 작업은 제품 목록이 고정되어 (즉, 응용 프로그램에 코딩 된) 많은 코딩 작업이 필요한 경우에만 가능합니다.

id, purchase_id, product_id, num_product와 같은 필드가있는 purchase_item 테이블을 만들고 싶을 것입니다. 표준 청구서에 선과 같을 것입니다 : purchase_id는 그 선이 속한 청구서를 식별합니다. product_id는 행이 약이고 num_product가 해당 행의 양 (승수)을 표시하는 제품을 표시합니다.

이렇게하면 신제품이 데이터베이스에 추가 될 때 코드를 변경할 필요가 없습니다.

+0

그것이 나쁜 습관 인 방법인지, 4 개 이상의 제품이 될 수는 없으므로 목록이 수정됩니다. 나는 고객을 찾아서 합계를 볼 수 있도록 청구서를 가질 필요가 없습니다. –

0

실행 한 문제에 대한 자세한 설명이 없으면 문제를 해결하는 방법을 말하는 것이 어렵습니다. 설명 된 설계로 원하는 것을 구현할 수 있어야합니다. 그러나 관계형 데이터베이스를 오해하고있는 것 같아서 데이터베이스 아키텍처가 눈부신 인상을 자아냅니다.

데이터베이스 테이블은 스프레드 시트가 아닙니다. 테이블에 수백만 개의 행이있을 수 있지만 일반적으로 열 수는 훨씬 적은 수로 제한됩니다. 제한이 문제가되지 않더라도 관계형 데이터베이스가 설계되는 방식은 많은 수의 열에 걸쳐 균일 한 데이터를 저장하는 데 적합하지 않습니다. 예를 들어, 데이터베이스는 "베스트셀러 제품", "100 개 이상의 고객이 구입 한 제품"등과 같은 질문에 대답 할 수 없습니다.

엄지 손가락의 규칙은 각각 테이블에는 고정 된 수의 열이 있어야합니다. 예를 들어 열을 추가해야하는 경우 새로운 제품을 판매하기 시작하면 잘못하고있는 것입니다.

  • products 각 제품에 고유 id, 가격과 같은 이름이 같은 다른 정보를 포함, 가능한 제품 당 하나 개의 행이있는 테이블해야한다 : 여기

    당신은 아마 당신의 응용 프로그램에서해야 할 일이다 , 제조업체 등
  • purchases에는 고객이 제품을 주문한 (고객, 제품) 모든 조합에 대해 하나의 행을 포함해야합니다. shouuld 행에는 고객 ID, 제품 ID 및 주문 수량이 들어 있습니다.

SQL을 사용하면 특정 고객이 주문한 일련의 제품을 생성하는 쿼리를 쉽게 작성할 수 있습니다. 조인을 사용하면이 정보를 제품 이름과 가격으로 향상시킬 수 있습니다.

+0

제품 목록은 고정되어 있으며 4 세 이상이 될 수 없습니다. 기록을 보거나 질문에 대답 할 수있는 것은 문제가 아니며 결코 될 수 없습니다. 내 관심사는 서로 다른 두 테이블의 정보를 서로 다른 두 가지 형식으로 읽는 방법입니다. –

+0

질문에 정보가 충분하지 않아 문제가 무엇인지 알 수 없습니다. 단지 두 개의 SQL 쿼리를 발행하고 양식에서 그 결과를 사용하십시오. –

+0

내 질문에 대한 수정 확인 –

관련 문제