我正在尝试显示我的成员(member)的 15 张个人资料照片的列表。
有一列名为settings
,看起来像0, 1, 1, 1
我只能显示上面第一个数字为 1
的人的照片。
由于我无法直接获取第一个数字
为 1 的人,因此我必须获取所有人,无论数字多少。然后我将只显示拥有 1 套的人。 (有什么办法可以解决查询中的问题吗?)
大约 20% 的成员(member)将 0
作为此数字,因此在我的查询中,我必须将 LIMIT
设置为高于 15(我将其设置为 30)现在,否则在 15 岁的时候我会得到一个包含少于 15 张图片的列表)。
但是,我必须在列表中准确显示 15 个人,并且结果通常在 15-30 人之间(因为 limit = 30)。
我尝试使用 for/while 循环,但我不确定将其放置在哪里。
这是我的代码:
$query = $conn->prepare("SELECT picture_path, profile_picture, username, last_visit, signup_date, settings FROM tusers
WHERE profile_picture IS NOT NULL
AND sex = 1
AND last_visit BETWEEN CURDATE() - INTERVAL 9 DAY AND CURDATE()
AND signup_date < CURDATE() - INTERVAL 10 DAY
ORDER BY RAND()
LIMIT 30");
$query->execute();
$members_results = $query->fetchAll(PDO::FETCH_ASSOC);
foreach ($members_results as $key => $member) {
$meet_new_people_enabled = explode(",", $member['settings']);
if ($meet_new_people_enabled[0] == '1') {
$picture_path = "http://www.mySite.com/" . $member['picture_path'] . "/" . $member['profile_picture'];
echo '<figure class="member"><a href="' . $member['username'] . '"><img src="' . $picture_path . '" title="' . $member['settings'] . '" width="100" height="100" /></a></figure>';
}
}
您将如何解决这个问题,以便准确显示 15 个人?
谢谢
最佳答案
您存储的数据有误。
数据库设计的基本规则(更正式地称为第一范式或 1NF)是每列应该保存 1 且仅 1 条数据(更正式地讲,所有数据必须是原子的)。
CSV 数据本质上不是原子数据。它是存储在以逗号分隔的列表中的多个值。正如您刚刚发现的那样,如果您拥有此类数据,您将很难操作和查询它。
您应该通过将数据放入从属表的设置列中并使用外键将其与主表中的行关联起来来标准化数据。
如果这不是一个选项,您至少应该为每个设置值有一列。
关于php - 显示从 MySQL 获取的 15 个元素的限制(而我被迫使用 15 以上的 LIMIT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18980184/