我正在创建一个函数来帮助我从数据库中返回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();
}
}
}
}
}