Почему возвращает только первый элемент массива?

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
    Я не вижу возвращения. Пожалуйста, уточните свой вопрос.
  • 1
    Также вам нужно научиться пользоваться JOIN
Теги:

2 ответа

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, который является ключом для результата, возвращаемого предыдущим запросом, однако в любой дальнейшей итерации он будет увеличиваться и что приведет к клавише undefined. Это означает, что вам нужно прекратить использовать переменную $count и просто использовать $result2[0].

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

  • 0
    Спасибо, шифр!
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] , поэтому он не будет работать.
  • 0
    О боже, спасибо :) Должен работать сейчас, хотя, как наиболее близкое решение к его подходу, хотя соединение, очевидно, лучше
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню