запрос PHP MySQL с циклом в нем - PullRequest
2 голосов
/ 04 мая 2011

Я пытаюсь получить результаты пользователей в моей базе данных, и затем, если мой флажок установлен, чтобы получать только пользователей, у которых есть фотографии, чтобы показать эти результаты, но я не могу понять, как проходить через этирезультаты или если я даже делаю это в правильном контексте.`

$photos = $_POST['pcbox'];
$basicsql = "SELECT * FROM users";
$basicsql .= "WHERE status > '1'";
if($photos=='1'){
    $sql = mysql_query("SELECT user_id FROM pictures GROUP BY user_id");
    while($row2 = mysql_fetch_assoc($sql))
    $options[] = " AND (users.user_id = '$row2[user_id]')";
    foreach($options as $key => $str){
        $basicsql .= $str;
    }
}
$basicsql .= " ORDER BY users.last_login DESC";
$pagesql = mysql_query($basicsql);

Все работает, пока не установлен флажок

Ответы [ 4 ]

1 голос
/ 04 мая 2011

Нельзя использовать один и тот же дескриптор базы данных для вложенных циклов.Вам необходимо явно установить дескриптор БД для каждого из них.

Однако вы можете просто сделать это в одном запросе sql.

Наблюдать:

Select * from users u inner join pictures p on u.id=p.user_id where status > 1

ВНУТРЕННЕЕ СОЕДИНЕНИЕ предоставит вам только тех пользователей, у которых есть строки в таблице изображений.

Это даст пользователям, у которых есть только рисунки.

Редактировать

Это даст количество ячеек и только 1 пользовательский ряд.

Select name,email,address,status,count(*) as num_pics from users u inner join pictures p on u.id=p.user_id group by name,email,address,status where status > 1

0 голосов
/ 04 мая 2011
$photos = isset($_POST['pcbox']) ? $_POST['pcbox'] : null;

$sql = 'SELECT U.* FROM users AS U LEFT JOIN pictures AS P ON P.user_id = U.id ' . ($photos == '1' ? 'WHERE P.id IS NOT NULL') . ' GROUP BY U.id ORDER BY U.last_login DESC';

$result = mysql_query($sql);
while($row = mysql_fetch_assoc($result))
  // Do something with the user info, such as outputting it to a table
}
0 голосов
/ 04 мая 2011

Не совсем уверен, что это то, что вы ищете. Также не проверено.

$photos = $_POST['pcbox'];
$basicsql = "SELECT * FROM users WHERE status > 1";
$photoSql = "SELECT * FROM users, pictures WHERE status > 1 AND users.user_id = pictures.user_id GROUP BY users.user_id ORDER BY users.last_login DESC"

if($photos=='1')
{
    $result = mysql_query($photosSql);
}
else
{
    $result = mysql_query($photoSql);
}
0 голосов
/ 04 мая 2011

Кроме того, закройте, прежде чем начинать цикл в опциях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...