【问题标题】:SQL: can I JOIN 2 tables according the first table "array" value?SQL:我可以根据第一个表“数组”值加入 2 个表吗?
【发布时间】:2014-07-26 14:38:57
【问题描述】:

我试图找到一种更好的方法来一次返回 2 个表。

我的第一张桌子是:

[ID]       [area]
  1        13,12,15
  6        18,17,13

第二个表是:

 [areaname]    [singlearea]
 textOf12     12
 textOf18     18
 textOf15     15

现在,我需要为每个[ID]点击返回区域名称,例如:

对于ID: 1、我需要如下数组:(textOf12,textOf15)

对于 ID 6 我需要:(textOf18) 仅。

这就是我现在拥有的(我不认为它是一个很好的代码):

$getall = "SELECT * FROM table1";
$resultfull = mysql_query($getall);
while ($res = mysql_fetch_assoc($resultfull))
{
$uarray = array();
$sqlarea = explode(",", $res['area']);

foreach($sqlarea as $userarea)
        {
        $areaarray = runquery("SELECT areaname From table2 WHERE singlearea = '".$userarea."'");
        $value = mysql_fetch_object($areaarray);
        array_push($uarray,$value->areaname);
        }
var_dump($uarray);

有什么建议吗?

非常感谢!

【问题讨论】:

  • "有什么建议吗?"修复您的数据结构,这样您就不会将数字列表存储为逗号分隔的字符。 SQL 有一个非常好的数据结构来存储列表。它被称为表。在这种情况下,特定类型的表称为联结表。
  • 考虑到数据结构,这是你能做的。花哨的代码技巧并不能替代强大的数据库架构。
  • 你说得对,我改一下结构,谢谢你的建议!

标签: php mysql arrays join


【解决方案1】:

逗号分隔的ID列表和ID值使用like匹配很好:

select t1.id, t2.areaname
  from table1 t1, table2 t2
  where concat(',', t1.area, ',') like concat('%,', t2.singlearea, ',%')

但是建议使用额外的链接表!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    相关资源
    最近更新 更多