JOIN ก่อนครับ แล้ว WHERE จากฟิลด์ข้อมูลที่ต้องการใช้คนหา
แนวทาง
SELECT
`ตารางหลัก`.*,
`ตารางB`.`ข้อมูลB`,
`ตารางC`.`ข้อมูลC`,
`ตารางD`.`ข้อมูลD`,
`ตารางE`.`ข้อมูลE`
FROM `ตารางหลัก`
JOIN `ตารางB` ON `ตารางB`.`id` = `ตารางหลัก`.`TB_B`
JOIN `ตารางC` ON `ตารางC`.`id` = `ตารางหลัก`.`TB_C`
JOIN `ตารางD` ON `ตารางD`.`id` = `ตารางหลัก`.`TB_D`
JOIN `ตารางE` ON `ตารางE`.`id` = `ตารางหลัก`.`TB_E`
WHERE
`ตารางหลัก`.`ข้อมูลA` LIKE '%คำค้น1%'
OR `ตารางB`.`ข้อมูลB` LIKE '%คำค้น2%'
OR `ตารางC`.`ข้อมูลC` LIKE '%คำค้น3%'
OR `ตารางD`.`ข้อมูลD` LIKE '%คำค้น4%'
OR `ตารางE`.`ข้อมูลE` LIKE '%คำค้น5%'
ตรง OR จะเป็น AND ก็ได้ แล้วแต่ว่าต้องการแบบไหน (แบบเข้าข่ายอย่างใดอย่างหนึ่ง หรือต้องตรงทั้งหมด)
Date :
2014-11-12 15:53:32
By :
FRINGE
No. 2
Guest
จะ LIKE หรือ จะ = ก็ได้ แต่แนวทางที่จะบอกคือต้อง JOIN ก่อนครับ เพื่อที่จะเอาข้อมูลจากตารางอื่นมาใช้เป็นเงื่อนไขได้
<?
$objConnect =include("conn.php");
$objDB = mysql_select_db("excepttaxdb_new");
$strSQL = "
SELECT
authorization.Aut_ID,
authorization.Aut_Number,
authorization.Prompted_Date,
corporation.ID_Cor,
corporation.Cor_name,
factory.Fac_ID,
factory.FacName,
trademarks.Trade_ID,
trademarks.Trade_Name,
type.Type_ID,
type.Type_Name,
capacitance.CC_ID,
capacitance.CC,
package.Pak_ID,
package.Pak_Name
FROM authorization ";
if($_POST["UserSelect"] != "" and $_POST["txtKeyword"] != '')
{
$strSQL .= "
LEFT JOIN corporation ON authorization.ID_Cor = corporation.ID_Cor
LEFT JOIN factory ON authorization.Fac_ID = factory.Fac_ID
LEFT JOIN trademarks ON authorization.Trade_ID = trademarks.Trade_ID
LEFT JOIN type ON type.Type_ID = authorization.Type_ID
LEFT JOIN capacitance ON capacitance.CC_ID = authorization.CC_ID
LEFT JOIN package ON package.Pak_ID = authorization.Pak_ID
WHERE
corporation.Cor_name AND (".$_POST["UserSelect"]." LIKE '%".$_POST["txtKeyword"]."%' )
OR factory.FacName AND (".$_POST["UserSelect"]." LIKE '%".$_POST["txtKeyword"]."%' )
OR trademarks.Trade_Name AND (".$_POST["UserSelect"]." LIKE '%".$_POST["txtKeyword"]."%' )
OR type.Type_Name AND (".$_POST["UserSelect"]." LIKE '%".$_POST["txtKeyword"]."%' )
OR capacitance.CC AND (".$_POST["UserSelect"]." LIKE '%".$_POST["txtKeyword"]."%' )
OR package.Pak_Name AND (".$_POST["UserSelect"]." LIKE '%".$_POST["txtKeyword"]."%' )
";
}
mysql_query("SET NAMES UTF8");
$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
Error Query [ SELECT authorization.Aut_ID, authorization.Aut_Number, authorization.Prompted_Date, corporation.ID_Cor, corporation.Cor_name, factory.Fac_ID, factory.FacName, trademarks.Trade_ID, trademarks.Trade_Name, type.Type_ID, type.Type_Name, capacitance.CC_ID, capacitance.CC, package.Pak_ID, package.Pak_Name FROM authorization LEFT JOIN corporation ON authorization.ID_Cor = corporation.ID_Cor LEFT JOIN factory ON authorization.Fac_ID = factory.Fac_ID LEFT JOIN trademarks ON authorization.Trade_ID = trademarks.Trade_ID LEFT JOIN type ON type.Type_ID = authorization.Type_ID LEFT JOIN capacitance ON capacitance.CC_ID = authorization.CC_ID LEFT JOIN package ON package.Pak_ID = authorization.Pak_ID WHERE corporation.Cor_name && (ID_Cor LIKE '%ท%' ) OR factory.FacName && (ID_Cor LIKE '%ท%' ) OR trademarks.Trade_Name && (ID_Cor LIKE '%ท%' ) OR type.Type_Name && (ID_Cor LIKE '%ท%' ) OR capacitance.CC && (ID_Cor LIKE '%ท%' ) OR package.Pak_Name && (ID_Cor LIKE '%ท%' ) ]
Column 'ID_Cor' in where clause is ambiguous
<?
$objConnect =include("conn.php");
$objDB = mysql_select_db("excepttaxdb_new");
$strSQL = "
SELECT authorization.Aut_ID,
authorization.Aut_Number,
authorization.Prompted_Date,
corporation.ID_Cor,
corporation.Cor_name,
factory.Fac_ID,
factory.FacName,
trademarks.Trade_ID,
trademarks.Trade_Name,
type.Type_ID,
type.Type_Name,
capacitance.CC_ID,
capacitance.CC,
package.Pak_ID,
package.Pak_Name
FROM authorization
LEFT JOIN corporation ON authorization.ID_Cor = corporation.ID_Cor
LEFT JOIN factory ON authorization.Fac_ID = factory.Fac_ID
LEFT JOIN trademarks ON authorization.Trade_ID = trademarks.Trade_ID
LEFT JOIN type ON type.Type_ID = authorization.Type_ID
LEFT JOIN capacitance ON capacitance.CC_ID = authorization.CC_ID
LEFT JOIN package ON package.Pak_ID = authorization.Pak_ID
";
if($_POST["UserSelect"] != "" && $_POST["txtKeyword"] != '')
{
$strSQL .= "
WHERE
corporation.Cor_name && (".$_POST["UserSelect"]." LIKE '%".$_POST["txtKeyword"]."%' )
OR factory.FacName && (".$_POST["UserSelect"]." LIKE '%".$_POST["txtKeyword"]."%' )
OR trademarks.Trade_Name && (".$_POST["UserSelect"]." LIKE '%".$_POST["txtKeyword"]."%' )
OR type.Type_Name && (".$_POST["UserSelect"]." LIKE '%".$_POST["txtKeyword"]."%' )
OR capacitance.CC && (".$_POST["UserSelect"]." LIKE '%".$_POST["txtKeyword"]."%' )
OR package.Pak_Name && (".$_POST["UserSelect"]." LIKE '%".$_POST["txtKeyword"]."%' )
";
}
mysql_query("SET NAMES UTF8");
$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]" . "<br>" . mysql_error() );
Error
Error Query [ SELECT authorization.Aut_ID, authorization.Aut_Number, authorization.Prompted_Date, corporation.ID_Cor, corporation.Cor_name, factory.Fac_ID, factory.FacName, trademarks.Trade_ID, trademarks.Trade_Name, type.Type_ID, type.Type_Name, capacitance.CC_ID, capacitance.CC, package.Pak_ID, package.Pak_Name FROM authorization LEFT JOIN corporation ON authorization.ID_Cor = corporation.ID_Cor LEFT JOIN factory ON authorization.Fac_ID = factory.Fac_ID LEFT JOIN trademarks ON authorization.Trade_ID = trademarks.Trade_ID LEFT JOIN type ON type.Type_ID = authorization.Type_ID LEFT JOIN capacitance ON capacitance.CC_ID = authorization.CC_ID LEFT JOIN package ON package.Pak_ID = authorization.Pak_ID WHERE corporation.Cor_name && (ID_Cor LIKE '%1%' ) OR factory.FacName && (ID_Cor LIKE '%1%' ) OR trademarks.Trade_Name && (ID_Cor LIKE '%1%' ) OR type.Type_Name && (ID_Cor LIKE '%1%' ) OR capacitance.CC && (ID_Cor LIKE '%1%' ) OR package.Pak_Name && (ID_Cor LIKE '%1%' ) ]
Column 'ID_Cor' in where clause is ambiguous
SELECT authorization.Aut_ID
, authorization.Aut_Number, authorization.Prompted_Date
, corporation.ID_Cor, corporation.Cor_name
, factory.Fac_ID, factory.FacName
, trademarks.Trade_ID, trademarks.Trade_Name
, type.Type_ID, type.Type_Name
, capacitance.CC_ID, capacitance.CC
, package.Pak_ID, package.Pak_Name
FROM authorization
LEFT JOIN corporation ON authorization.ID_Cor = corporation.ID_Cor
LEFT JOIN factory ON authorization.Fac_ID = factory.Fac_ID
LEFT JOIN trademarks ON authorization.Trade_ID = trademarks.Trade_ID
LEFT JOIN type ON type.Type_ID = authorization.Type_ID
LEFT JOIN capacitance ON capacitance.CC_ID = authorization.CC_ID
LEFT JOIN package ON package.Pak_ID = authorization.Pak_ID
WHERE corporation.Cor_name && (ID_Cor LIKE '%1%' )
OR factory.FacName && (ID_CorLIKE '%1%' )
OR trademarks.Trade_Name && (ID_CorLIKE '%1%' )
OR type.Type_Name && (ID_CorLIKE '%1%' )
OR capacitance.CC && (ID_CorLIKE '%1%' )
OR package.Pak_Name && (ID_CorLIKE '%1%' ) ]
Column 'ID_Cor' in where clause is ambiguous
ต้องกำหนดชื่อ ตารางให้มันด้วยนะครับ
WHERE corporation.Cor_name&& (ID_Cor LIKE '%1%' )
OR factory.FacName&& (ID_Cor LIKE '%1%' )
OR trademarks.Trade_Name&& (ID_Cor LIKE '%1%' )
OR type.Type_Name&& (ID_Cor LIKE '%1%' )
OR capacitance.CC&& (ID_Cor LIKE '%1%' )
OR package.Pak_Name&& (ID_Cor LIKE '%1%' )
สีแดงใส่ ชื่อตารางหรือยังครับ เช่น corporation.ID_Cor LIKE '%1%'
ส่วนสี เหลือง ใน sql ใช้ and ครับ
และสีเขียว เปรียบเทียบกับอะไรครับ
คือรูปแบบการเปรียบเทียบ ผิดไวยกรณ์ครับ
ควรจะเป็นแบบนี้ Code (SQL)
WHERE authorization.ID_Cor LIKE '%ตัวเปรียบเทียบ%'
and
( corporation.Cor_name like '%ตัวค้นหา%'
OR factory.FacName like '%ตัวค้นหา%'
OR trademarks.Trade_Name like '%ตัวค้นหา%'
OR type.Type_Name like '%ตัวค้นหา%'
OR capacitance.CC like '%ตัวค้นหา%'
OR package.Pak_Name like '%ตัวค้นหา%'
)
Error Query [ SELECT authorization.Aut_ID, authorization.Aut_Number, authorization.Prompted_Date, corporation.ID_Cor, corporation.Cor_name, factory.Fac_ID, factory.FacName, trademarks.Trade_ID, trademarks.Trade_Name, type.Type_ID, type.Type_Name, capacitance.CC_ID, capacitance.CC, package.Pak_ID, package.Pak_Name FROM authorization LEFT JOIN corporation ON authorization.ID_Cor = corporation.ID_Cor LEFT JOIN factory ON authorization.Fac_ID = factory.Fac_ID LEFT JOIN trademarks ON authorization.Trade_ID = trademarks.Trade_ID LEFT JOIN type ON authorization.Type_ID = type.Type_ID LEFT JOIN capacitance ON authorization.CC_ID = capacitance.CC_ID LEFT JOIN package ON authorization.Pak_ID = package.Pak_ID WHERE ID_Cor LIKE '%ท%' ]
if($UserSelect>'' && $txtKeyword>''){
switch($UserSelect){
case "authorization.ID_Cor": $or=" or corporation.Cor_name like '%$txtKeyword%' "; break;
case "factory.Fac_ID": $or=" or factory.FacName like '%$txtKeyword%' "; break;
case "trademarks.Trade_ID": $or=" or trademarks.Trade_Name like '%$txtKeyword%' "; break;
case "type.Type_ID": $or=" or type.Type_Name like '%$txtKeyword%' "; break;
case "capacitance.CC_ID": $or=" or capacitance.CC like '%$txtKeyword%' "; break;
case "package.Pak_ID": $or=" or package.Pak_Name like '%$txtKeyword%' "; break;
}
$strSQL .= " WHERE $UserSelect LIKE '%$txtKeyword%' ".$or;
}