簡體   English   中英

MySQL連接結果與PHP不同?

[英]MySQL join results different in PHP?

我有一個問題:

SELECT * FROM categorys 
LEFT JOIN category_info ON categorys.cat_id=category_info.cat_id 
WHERE `cat_name` = 'aname'
ORDER BY `cat_order`

當我在phpMyAdmin中運行它時,無論第二個表中是否存在匹配,我都會返回cat_id。

但是,當我在我的PHP代碼中運行此查詢時,我得到一個空白的cat_id,如此print_r()所示:

數組([cat_id] => [cat_name] =>浴室[類型] =>主[cat_order] => 99 [cat_img] => [顯示] => 1 [刪除] => 0 [desc_id] => [desc] => [text] =>)

當查詢完全相同時,為什么會有不同的結果?

編輯:我的PHP代碼:

$getcatidsql = "SELECT * FROM categorys 
LEFT JOIN category_info ON categorys.cat_id=category_info.cat_id 
WHERE `cat_name` = '{$cname}'
ORDER BY `cat_order";   
$getcatidresult = $db->query( $getcatidsql );
$catdata = $db->fetchRow( $getcatidresult );

function query() {
  $this->query_total++;
  if (func_num_args() == 1) {
    $sql = func_get_arg(0);
  } else {
    $args = func_get_args();
    for ($i=1;$i<count($args);$i++) if (!is_numeric($args[$i])) $args[$i] = '"'.mysql_real_escape_string($args[$i]).'"';
    $sql = vsprintf(array_shift($args),$args);
  }
  if ($result = mysql_query($sql,$this->db_connection)) {
    return $result;
  } else {
    $this->dberror( $this->db_connection, $sql );
  }
}

function fetchRow($result,$type=MYSQL_ASSOC)
{
    if($result)
        $row = mysql_fetch_array($result,$type);
    return $row;
}

我認為你不能使用select *(也因為兩個表中的列名相同),而是根據需要選擇准確的字段

  select table_name.field, table_name.field2, other_table_name.field1 

..並且你將得到PHP代碼和phpmyadmin的正確結果

我認為這是因為'cat_id'在兩個表中都是相同的字段名=>結果數組中的相同索引。 嘗試修改如下的查詢:“從classes中選擇categorys.cat_id AS類別.....”

你是從categoryscategory_info選擇*。 它們都有一個cat_id列。 所以你會得到兩個cat_id列。

問題是:當您在SELECT列表中遇到兩個具有相同名稱的列時,您正在使用的SQL庫/驅動程序是做什么的?

看起來它可能會覆蓋第二個遇到的第一個......如果使用顯式SELECT列表,指定categorys.cat_id 而不引入category_info.cat_id什么?

當你說

當我在phpMyAdmin中運行它時,我得到了一個cat_id

你是說你為cat_id獲得了一個VALUE還是你把它變為NULL? 因為這是你用php得到的,cat_id的NULL值(正如你在print_r中看到的那樣,它仍然出現在那里)。

如果您不希望從該categorys中沒有現有行的category_info獲取行,則必須使用RIGHT JOIN而不是LEFT JOIN。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM