创建新函数-MySQL 1-M-在PHP中返回M


Creating New Function - MySQL 1-M - Return M in PHP

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

我想要实现的目标:

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

我想要一个函数,它将采用列名(在本例中为"Location")和我想存储结果的表的表名。然后反向查找列的。

<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,Location实际上是24_Locations。如果有人想自己使用我的位置列表,他们只需将他们的xx_FormY链接到我的24_Locations,就可以使用相同的功能来获取适当的信息。这比我将表中的每一列命名为24_xxxx并强迫它们也这样做要好。感谢

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();
            }
        }
    }
}
}