2013-07-19 2 views
0

извиниться во-первых, для моего сомнительного кодирования в PHP/MySQL, однако это все самоучка (возможно, не лучшая практика)результаты Mysql дублируется, даже если запрос не соответствует

Весь мой код, кажется, работает, однако, когда результаты записываются на страницу любой $dxcall, которая не находится в базе данных $qrzdata, заполняется последним результатом, все остальные данные отображаются в порядке. Я попытался изменить like $dxcall на = $dxcall. Я также попытался объединить массивы извлечения, чтобы я тоже не мог найти проблемы. Но, очевидно, мой код не знает, как обращаться, где нет данных в базе данных qrzdata и двигаться дальше.

$frqry является основными данными, все остальные mysql_query-х будь то $squares и $qrzdata имеют соответствие то, что происходит от $frqry. Надеюсь, это имеет смысл!

Вот мой код

$frqry = mysql_query("select * from spots where freq between '69900' and '70300' ORDER BY datetime desc limit 30"); 
While ($r0 = mysql_fetch_array($frqry)) 
{ 
$freq = $r0["freq"]; 
$dxcall = $r0["dxcall"]; 
$datetime = $r0["datetime"]; 
$comments = $r0["comments"]; 
$spotter = $r0["spotter"]; 
$dt = date('d-m-y H:i ', $datetime); 
$qra = $r0["loc"]; 

$squares = mysql_query("select * from squares where callsign like '$dxcall' limit 1"); 
while ($r1 = mysql_fetch_array($squares)) 
{ 
$qra = $r1["loc"]; 
} 

$qrzdata = mysql_query("select * from qrzdata where callsign = '".$dxcall."' limit 1"); 
While ($r2 = mysql_fetch_array($qrzdata)) 
{ 
$country = $r2["country"]; 
$firstname = $r2["firstname"]; 
$city = $r2["city"]; 
} 

Любая помощь очень ценится. Спасибо.

+1

Что точка тех вложенной 'while', если вы используете 'LIMIT 1' в запросах? – Eggplant

ответ

2

Вы должны узнать о силе JOIN;)

весь Ваш код может быть переписан в одном запросе:

Отказ от ответственности: не проверял, но вы, конечно, получите представление

SELECT * FROM spots 
JOIN squares ON (squares.callsign = spots.dxcall) -- this comes in stead of your first inner loop 
JOIN qrzdata ON (qrzdata.callsign = spots.dxcall) -- this is your second loop 
WHERE freq BETWEEN 69900 AND 70300 -- remove quotes, you are dealing with integers, not strings (hopefully) 
0

Вы должны сбросить свои вары!

While ($r0 = mysql_fetch_array($frqry)) 
{ 
    $qra = ''; 
    $country = ''; 
    $firstname = ''; 
    $city = ''; 

или вы получите ВСЕГДА последнее значение

Смежные вопросы