我是php&的新手MySQL的。 我有一个包含两个名为person(属性所有者)和属性的表的数据库。 表之间存在一对多的关系。例如,一个人可以拥有许多财产。
我正在使用php从数据库中检索数据(我已经与数据库建立了连接)。
我想要实现的目标是:如果对某个人的名字进行查询 - (无论是fname还是lname) - 那么此人所拥有的所有属性的列表将显示在我的搜索结果中形成。输出将显示为lname,fname,属性编号,属性路,属性zipcode。
但是,使用此代码,我每个属性所有者名称只获得两个结果输出。 :
$request = mysql_query("SELECT person.fname, person.lname, property.number, property.road, property.zipcode,
FROM person p
INNER JOIN property py
ON p.id = py.p_id
WHERE p.fname LIKE '%$search%'
OR p.lname LIKE '%$search%'
ORDER BY p.lname");
$number = mysql_num_rows($request);
if ($number == 0){
$result .= 'No results'.' '.$search;
} else {
$propertyinfo= array();
$count = 0;
$real = false;
$real_within_array = 0;
while ($nrow = mysql_fetch_array($query)){
$lname = $nrow['lname'];
$real = false;
for ($l = 0; $l < count($propertyinfo); $l++)
{
if ($propertyinfo[$l][0] == $lname)
{
$real = true;
$real_within_array = $l;
break;
}
}
if ($real)
{
$fname = $nrow['fname'];
$lname = $nrow['lname'];
$number = $nrow['number'];
$road = $nrow['road'];
$zipcode = $nrow['zipcode'];
$propertyinfo[$real_within_array][1][1] = $fname;
$propertyinfo[$real_within_array][2][1] = $lname;
$propertyinfo[$real_within_array][3][1] = $number;
$propertyinfo[$real_within_array][4][1] = $road;
$propertyinfo[$real_within_array][5][1] = $zipcode;
}
else
{
// Get all the data from the row.
$fname = $nrow['fname'];
$lname = $nrow['lname'];
$number = $nrow['number'];
$road = $nrow['road'];
$zipcode = $nrow['zipcode'];
$propertyinfo[$real_within_array][1] = $fname;
$propertyinfo[$real_within_array][2]= $lname;
$propertyinfo[$real_within_array][3][0] = $number;
$propertyinfo[$real_within_array][4][0] = $road;
$propertyinfo[$real_within_array][5][0] = $zipcode;
$count++;
}
}
示例:Adam Smith拥有4个属性,但我只会得到两个属性的结果,而不是列表中的所有4个属性。
请帮忙。我已经尽力解决这个问题,但我似乎偶然发现了一个棘手的问题。
非常感谢您的帮助。 先感谢您。
答案 0 :(得分:0)
什么是$uqery
?也许:
while ($nrow = mysql_fetch_array($request)){
您会看到:
error_reporting(E_ALL);
ini_set('display_errors', '1');
至于所有其他的东西,如果不知道$propertyinfo
的样子,就不可能分辨出来。看起来很复杂所以我不跟随。
答案 1 :(得分:0)
我认为这是一个逻辑错误; 当你定义$ propertyinfo = array();它的大小为0,因此带有块的代码 for($ l = 0; $ l&lt; count($ propertyinfo); $ l)只有在将一些值分配给$ propertyinfo后才会开始运行。
答案 2 :(得分:-1)
尝试使用while(($nrow=mysql_fetch_assoc($query))!=null)
循环查询结果