-1

我正在创建一个函数来帮助我从我的数据库中返回 1-M(一对多关系)结果。

我想要达到的目标:

我有一个带有位置下拉列表的表单。

我想要一个函数,它将获取列名(在本例中为“位置”)和我想要存储结果的表的表名。然后反向查找列。

<select>
    <option value="1">London</option>
    <option value="2">Somewhere else</option>
    <?
        $array=DataLink("location","form1");
        php foreach($array as $row){
            echo "<option value=\"".$row[0]."\">".$row[1]."</option>";
        }
    ?>
</select>

我的数据库看起来像这样:

|Form1                    |          |Locations                    |
---------------------------          -------------------------------
|Name                     |          |ID                           |
|Location                 |          |CityName                     |
|OtherInfo                |          -------------------------------
---------------------------

现在我可以看到,简单的解决方案是简单地使用列名称与包含该列信息的特定表相关。但我不想那样做。我想使用各种“外键”或其他方法来查找列与其 1-M 链接之间的关系...

谁能告诉我他们将如何处理这个问题。有没有办法像这样将表格链接在一起,以便我们可以看到数据等之间的关系?

在此先感谢所有为此做出贡献的人。

---编辑---作为旁注,因为这似乎引发了编程标准的问题。我正在开发一个系统,其中几个人正在开发几个不同的模块等。我的表都以我的 uniqueID (24) 为前缀,所以我的表 Form1 实际上是 24_Form1 而位置实际上是 24_Locations。如果有人想为自己使用我的 Locations 列表,他们只需将他们的 xx_FormY 链接到我的 24_locations,并能够使用相同的函数来提取适当的信息。这比我将表中的每一列命名为 24_xxxx 并强迫他们这样做要好。谢谢

4

1 回答 1

0
function RDataLink($field, $table, $current=""){
accessDB();
    $QTable=mysql_query("SHOW CREATE TABLE $table");
    $Table=mysql_result($QTable,0,1);
exitDB();
// CONSTRAINT `jobSeeker_ibfk_1` FOREIGN KEY (`location`) REFERENCES `24_location` (`UID`)
$x=preg_match_all('/FOREIGN[^(]+.[^(]+[^)]+./',$Table,$matches);
foreach ($matches as $array){
    foreach ($array as $value){
        if(preg_match("/(?<=FOREIGN\sKEY.{3})$field/",$value)){
            if (preg_match("/(?<=REFERENCES[^`].)[^`]+/",$value,$ForeignTable)){
                accessDB();
                    $Qrows=mysql_query("SELECT * FROM ".$ForeignTable[0]);
                exitDB();
                $options="<select name=\"$field\">";
                while ($rows=mysql_fetch_array($Qrows,MYSQL_ASSOC)){
                    $options.="<option value=\"".$rows['UID']."\"".($current==$rows['UID'] ? "selected" : "") .">".$rows['name']."</option>";
                }
                $options.="</select>";
            }
        }
    }
}
if(!$x){
    return false;
}
    else {
    return $options;
}
}

function RQuery($field,$table,$current){
accessDB();
    $QTable=mysql_query("SHOW CREATE TABLE $table");
    $Table=mysql_result($QTable,0,1);
exitDB();
$x=preg_match_all('/FOREIGN[^(]+.[^(]+[^)]+./',$Table,$matches);
foreach ($matches as $array){
    foreach ($array as $value){
        if(preg_match("/(?<=FOREIGN\sKEY.{3})$field/",$value)){
            if (preg_match("/(?<=REFERENCES[^`].)[^`]+/",$value,$ForeignTable)){
                accessDB();
                    $Qrow=mysql_query("SELECT name FROM ".$ForeignTable[0]." WHERE UID='$current'");
                    return mysql_result($Qrow,0);
                exitDB();
            }
        }
    }
}

}
于 2013-07-18T19:42:59.027 回答