MySQL присоединиться результаты разные в PHP? - PullRequest
3 голосов
/ 12 сентября 2011

У меня есть запрос:

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 ():

Array ([cat_id] => [cat_name] => baths [type] => main[cat_order] => 99 [cat_img] => [display] => 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;
}

Ответы [ 4 ]

2 голосов
/ 12 сентября 2011

Я думаю, что вы не должны использовать select * (также из-за одинаковых имен столбцов в обеих таблицах), но должны выбрать именно те поля, которые вам нужны

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

.. и вы получите правильные результаты от обоихphp код и phpmyadmin

1 голос
/ 12 сентября 2011

ВЫ ВЫБИРАЕТЕ * из categorys и category_info.У них обоих есть столбец cat_id.Таким образом, вы получите два cat_id столбца обратно.

Вопрос в том, что делает используемая вами библиотека / драйвер SQL, когда она встречает два столбца с одинаковым именем в списке SELECT?

Похоже, что он, вероятно, перезаписывает первый, который встречается со вторым ... Что произойдет, если вы используете явный список SELECT, указывая categorys.cat_id и , а не , вводящий category_info.cat_id?

1 голос
/ 12 сентября 2011

Я думаю, это потому, что 'cat_id' - это одно и то же имя поля в обеих таблицах => один и тот же индекс в массиве результатов.Попробуйте изменить запрос, например: «Выберите категорию категорий.cat_id AS из категорий .....»

0 голосов
/ 12 сентября 2011

Когда вы заявляете

Когда я запускаю это в phpMyAdmin, я получаю cat_id обратно

Вы имеете в виду, что вы получаете ЗНАЧЕНИЕ для cat_id или вы получаете его как NULL? Потому что это то, что вы получаете с php, значение NULL для cat_id (как вы видите в print_r, оно все еще там отображается).

Если вы не хотите получать строки из categorys, где в category_info не существует существующей строки для этой категории, тогда вы должны использовать RIGHT JOIN вместо LEFT JOIN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...