Взрыв строки и выборка из базы данных - PullRequest
0 голосов
/ 11 июля 2011

У меня есть массив с идентификаторами пользователей. Я хочу взорвать этот массив и извлечь все из базы данных по этому идентификатору пользователя. Он выбирает только 1 запись каждого пользователя, а не каждую запись от этого пользователя. Я что-то пропустил? Спасибо!


Редактировать: Извините за то, что так мало, это была долгая ночь разочарования, я уточню.

if ( $follower_array != "" ) 
{

  $followArray = explode(",", $follower_array);
  $followCount = count($followArray);   
  $i = 0;
  $display .= "<table>";

  foreach( $followArray as $key => $value ) 
  {

      $i++;
      $sql = mysql_query(" SELECT * FROM database WHERE mem_id='$value' 
                           ORDER BY bc_date ASC 
                           LIMIT 50
                         ") or die ("error!");

    while ( $row = mysql_fetch_assoc($sql) ) 
    {
      $mem_id  = $row['mem_id'];
      $content = $row['content'];
      $display .= "<td>' .$content. '</td></tr>";
    }

    display .= "</table>";
}

Таблицы базы данных следующие:

members|content
---------------
            id |id
follower_array |mem_id
               |content

массив follwer выглядит как "4,5,6,7" и т. Д.

У меня есть четыре идентификатора участника в фиктивных данных. Он извлекает их в $ followArray

Выход

  • mem_id: 1 - содержимое
  • mem_id: 2 - содержимое
  • mem_id: 3 - содержимое
  • mem_id: 4 - содержимое

но потом останавливается. Он извлекает только один контент для каждого участника, когда их больше для каждого пользователя. Спасибо, надеюсь, я все прояснил.

Ответы [ 4 ]

1 голос
/ 01 ноября 2011

Это потому, что foreach увеличивается только $i один раз, попробуйте использовать $key, поскольку он увеличивается каждый раз, когда foreach цикл запускается, так как это индекс каждого элемента в массиве.

0 голосов
/ 11 июля 2011

Возможно, вы используете условие WHERE в неправильном столбце.$ sql говорит ВЫБРАТЬ ВСЕ ИЗ БАЗЫ ДАННЫХ, ГДЕ ID ВХОДА = $ ЗНАЧЕНИЕ, идентификатор, используемый в вашем запросе, является идентификатором записи, вы должны изменить идентификатор на user_id = $ value

SELECT * FROM database WHERE user_id='$value' LIMIT 50
0 голосов
/ 11 июля 2011
$searchSQL = "select * from database where id=$value'";
$result = mysql_query($searchSQL); 
while ($row = mysql_fetch_array($result))
 { 
  $id= $row['id'];
  $name=$row['name'];
  $phn=$row['phn'];
  $sal=$row['sal'];
 }

это извлечет ваши данные, и вы можете отобразить, где вы хотите отобразить

0 голосов
/ 11 июля 2011

Попробуйте изменить mysql_fetch_array на mysql_fetch_assoc

Кроме того, убедитесь, что в базе данных имеется более одной строки, соответствующей вашим критериям.Вы должны попытаться использовать программу наподобие navicat или mysql work bench для прямого запроса к базе данных ...

Это должно помочь ...


Обновление:

Можетвывод будет искажен, потому что вы пропустили открывающий тег tr?Кроме того, у вас были одинарные кавычки, оканчивающиеся строкой, начинающейся с двойных кавычек .... это тоже исправлено.

if ( $follower_array != "" ) {

  $followArray = explode(",", $follower_array);
  $followCount = count($followArray);   
  $i = 0;
  $display .= "<table>";

  foreach( $followArray as $key => $value ) {

    $i++;
    $sql = mysql_query("
        SELECT * 
          FROM database 
         WHERE mem_id='$value' 
      ORDER BY bc_date ASC 
         LIMIT 50
    ") or die ("error!");

    while ( $row = mysql_fetch_assoc($sql) ) {
      $mem_id  = $row['mem_id'];
      $content = $row['content'];

      $display .= "<td><tr>" .$content. "</td></tr>";
    }
    display .= "</table>";
}
...