【问题标题】:Join two MYSQL columns in PHP在 PHP 中加入两个 MYSQL 列
【发布时间】:2015-08-18 12:38:11
【问题描述】:

我有两个 MYSQL 表:“product”和“url_alias”。

+------------+--------+
|        product      |
+------------+--------+
| product_id | status |
+------------+--------+
|          1 |      1 |
|          2 |      0 |
|          3 |      1 |
+------------+--------+

+------------+------------+
|        url_alias        |
+--------------+----------+
|    query     | keyword  |
+--------------+----------+
| product_id=1 | keyword1 |
| product_id=2 | keyword2 |
| product_id=3 | keyword3 |
+--------------+----------+

我正在编写 PHP 代码以从 url_alias 表中提取关键字列,但仅针对 product 表中具有相应状态 = 1 的 product_id。我认为这将涉及连接两列并同时使用过滤器。

$sql  = "
SELECT p.product_id
     , ua.keyword 
  FROM `".$this->tables["product"]."` p 
 WHERE p.status = 1 
  LEFT 
  JOIN `".$this->tables["url_alias"]."` ua 
    ON ua.query = CONCAT('product_id=',p.product_id) ";

到目前为止,我得到:

错误:您的 SQL 语法有错误;

谁能帮我解决这个问题?

【问题讨论】:

  • 这闻起来很糟糕。如果 query column always = product_id={id} 然后将其设为 int 并删除 product_id= 部分。如果该列包含更多不同的数据{string}{id},则拆分为两列querystringqueryid
  • 令人惊讶的是,这就是错误消息所说的全部内容。您必须使用非常特殊的 mysql 版本。
  • 友情提示:遇到 SQL 语法错误时,如果您可以访问它(命令行、phpmyadmin 等),请先在 DB 控制台中敲定查询。当你得到想要的结果时,开始把它转换成一个 php 友好的字符串。
  • @harris 我同意,这是一个很好的做法,但我已经尝试过了,也无法让它在那里工作。
  • @Strawberry 其余的错误信息并没有为这篇文章添加任何有用的信息,只是我的语法回显,所以我把它省略了。

标签: php mysql sql join


【解决方案1】:

试一试

$sql  = "SELECT p.product_id,ua.keyword FROM `".$this->tables["product"]."` p ";
$sql .= "LEFT JOIN `".$this->tables["url_alias"]."` ua ON ua.query=CONCAT('product_id=',p.product_id) ";
$sql .= " WHERE p.status=1";

由于您没有定义错误但查看查询,这是因为您在加入之前应用了 where 条件,它应该在加入之后

【讨论】:

    【解决方案2】:

    试试这个:

    $sql  = "SELECT p.product_id,ua.keyword FROM ".$this->tables["product"]." as p WHERE p.status=1 ";
    $sql .= "LEFT JOIN ".$this->tables["url_alias"]." as ua ON ua.query = CONCAT('product_id=',p.product_id) ";
    

    你错过了'as'。

    【讨论】:

      【解决方案3】:

      删除 From 后表名的单引号。 试试这个查询

         $sql  = "SELECT p.product_id,ua.keyword FROM ".$this->tables["product"]." p WHERE p.status=1 ";
          $sql .= "LEFT JOIN ".$this->tables["url_alias"]." ua ON ua.product_id=p.product_id ";
      

      【讨论】:

      • url_alias 表没有 product_id 列。 (虽然应该,请参阅问题下史蒂夫的评论。)但事实上,这个查询不起作用。
      猜你喜欢
      • 2012-06-27
      • 1970-01-01
      • 2013-05-30
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      • 1970-01-01
      • 2011-06-09
      • 1970-01-01
      相关资源
      最近更新 更多