0

私は3つのテーブルを持っています:

tb_document
============================
|document_id|document_title|
============================
|     1     |        A     |
|     2     |        B     |
|     3     |        C     |
============================

tb_wrapper_scho                  tb_wrapper_li
=============================    =============================
|id_scho|data_title|doc_name|    |id_sli |data_title|doc_name|
=============================    =============================
|   1   |  TitleA  |   A    |    |   1   |  TitleB  |   B    |
|   2   |  TitleC  |   C    |    =============================
=============================

I want to get data_titlefrom tb_wrapper_schoand tb_wrapper_liwhere has same doc_namewith document_titlein tb_document1 つの結果$title

クエリは次のとおりです。

SELECT
      tb_document.document_title,
      tb_wrapper_scho.data_title,
      tb_wrapper_scho.doc_name,
      tb_wrapper_li.data_title,
      tb_wrapper_li.doc_name
FROM
      INNER JOIN tb_wrapper_scho ON tb_document.document_title = tb_wrapper_scho.doc_name
      INNER JOIN tb_wrapper_li ON tb_document.document_title = tb_wrapper_li.doc_name
WHERE 
      document_id = '$doc_id' 

while ($row = mysql_fetch_array($sql)) {
     $title = $row['data_title'];
     print_r($title);
}

それは私に空の結果を与えます。助けてください..ありがとう:)

4

5 に答える 5

0
SELECT
      tb_document.document_title,
      tb_wrapper_scho.data_title,
      tb_wrapper_scho.doc_name,
      tb_wrapper_li.data_title,
      tb_wrapper_li.doc_name

FROM tb_document AS tb_document

    LEFT JOIN tb_wrapper_scho AS tb_wrapper_scho ON (tb_wrapper_scho.doc_name=tb_document.document_title)
    LEFT JOIN tb_wrapper_li AS tb_wrapper_li ON (tb_wrapper_li.doc_name=tb_document.document_title)

WHERE tb_document.document_id = intval($doc_id);

何かいい?

また、mysql_query の結果を確認でき、mysql_fetch_array() は TRUE を返す必要があります。

于 2012-11-01T13:42:49.003 に答える
0

テーブルには同じ名前の列が含まれているため、エイリアスを使用してデータを取得するときに、列名を別の名前に変更する必要があります。結果配列には、各値の一意のインデックスが含まれている必要があります。したがって、クエリは次のようにする必要があります

SELECT 
      d.document_title as document_title,
      s.data_title as scho_data_title,
      s.doc_name as scho_doc_name,
      li.data_title as li_data_title,
      li.doc_name as li_data_name
FROM
      tb_document d
      LEFT JOIN tb_wrapper_scho s ON d.document_title = s.doc_name
      LEFT JOIN tb_wrapper_li li ON li.doc_name = d.document_title 
WHERE 
      d.document_id = '$doc_id'
于 2012-11-01T13:40:24.640 に答える
0

句にtb_documentテーブルがありません。FROM代わりにこれを試してください:

SELECT
      d.document_title,
      s.data_title,
      s.doc_name,
      i.data_title,
      i.doc_name
FROM  tb_document d
      INNER JOIN tb_wrapper_scho s ON d.document_title = s.doc_name
      INNER JOIN tb_wrapper_li i ON d.document_title =i.doc_name
WHERE 
      document_id = '$doc_id' 
于 2012-11-01T12:54:35.760 に答える
0
SELECT
      tb_document.document_title,
      tb_wrapper_scho.data_title,
      tb_wrapper_scho.doc_name,
      tb_wrapper_li.data_title,
      tb_wrapper_li.doc_name
FROM tb_document
      left outer JOIN tb_wrapper_scho ON tb_document.document_title = tb_wrapper_scho.doc_name
      left outer JOIN tb_wrapper_li ON tb_document.document_title = tb_wrapper_li.doc_name
WHERE 
      document_id = '$doc_id' 
于 2012-11-01T12:57:28.577 に答える
0

アイデアがあります。よろしいですか:

SELECT * FROM
  (SELECT * FROM tb_document as tbDoc INNER JOIN tb_wrapper_scho as tbScho
  ON tbDoc.document_title = tbScho.doc_name
UNION
  SELECT * FROM tb_document as tbDoc INNER JOIN tb_wrapper_li as tblI
  ON tbDoc.document_title = tblI.doc_name)threeTableJoin ORDER BY `document_id` ASC

それだけです、頑張ってください!

于 2012-11-01T13:30:10.453 に答える