2010-09-26 2 views
0
$count =0; 
$result1 = mysql_query("SELECT fwid FROM sbsw WHERE fword = '".$searchText."'"); 
while ($result2= mysql_fetch_array($result1)) 
{ 
$result3 = mysql_query("SELECT fsyn FROM wrsyn WHERE fwid = '".$result2[$count]."'"); 
$result4= mysql_fetch_array($result3); 
print $result4[$count].'<br>'; 
$count++; 
} 

mysql_free_result($result1); 
mysql_free_result($result3); 
+0

Я не вижу никакого возвращения происходит. Пожалуйста, уточните свой вопрос. – NullUserException

+1

Также вам нужно научиться использовать 'JOIN' – NullUserException

ответ

1

Давайте посмотрим, как mysql_fetch_array работ - например, если у вас есть структуру таблицы как

id | name | surname | role 

1 John Smith user 
2 Peter Qeep  user 
3 Mark Ziii  admin 

При выполнении запроса SELECT * FROM table, а затем цикл $result = mysql_fetch_array($query), $result всегда будет массив (4), содержащий

[0] => id, 
[1] => name, 
[2] => surname, 
[3] => role 

Таким образом, при выполнении запроса $result3 = mysql_query("SELECT fsyn FROM wrsyn WHERE fwid = '".$result2[$count]."'");, в первой итерации, $count будет 0, который является ключевым для результат, возвращаемый предыдущим запросом, однако в любой дальнейшей итерации он будет увеличиваться, и это приведет к неопределенному ключу. Это означает, что вам нужно прекратить использовать переменную $count и просто использовать вместо этого $result2[0].

Кроме того, способ лучше подход к этому будет использовать MySQL JOIN, в вашем примере это будет SELECT w.fsyn FROM sbsw s JOIN wrsyn w ON s.fwid = w.fwid WHERE s.fword = "'.$searchText.'";

+0

Спасибо, cypher! – Astraport

0

Пожалуйста, используйте разумные имена переменных и отступ правильно. Вы получаете один столбец из каждой строки, поскольку вы печатаете только один раз для каждой итерации по вашим строкам.

В принципе: для каждой строки напечатайте значение столбца.

$ count-variable определил, какой столбец, но, очевидно, не имеет смысла, он подсчитывает строку, в которой вы находитесь.

Что-то вроде этого следует сделать это: (не тестировалось)

$result1 = mysql_query("SELECT fwid FROM sbsw WHERE fword = '".$searchText."'"); 
while ($result2= mysql_fetch_array($result1)) 
{ 
    $result3 = mysql_query("SELECT fsyn FROM wrsyn WHERE fwid = '".$result2['fwid']."'"); 
    $result4= mysql_fetch_row($result3); 
    for($x = 0; $x < count($result4); $x++){ 
     print $result4[$x].'<br>'; 
    } 
} 

mysql_free_result($result1); 
mysql_free_result($result3); 

О, и я изменил fetch_array к fetch_row во внутреннем цикле, чтобы облегчить итерации.

+0

Это не решает главной проблемы -' $ result2 [$ count] ', поэтому это не сработает. – cypher

+0

О, мой, спасибо :) Должен теперь работать, как самое близкое решение для его подхода, хотя соединение, очевидно, лучше –

+0

После редактирования он тоже не будет работать, вы используете mysql_fetch_array, который по умолчанию DEFAULT возвращает число- индексированный массив, вам нужно будет использовать опцию 'MYSQL_ASSOC' (' mysql_fetch_array ($ query, MYSQL_ASSOC); ') для получения ассоциативных ключей массива :-) – cypher

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