Forum Moderators: open
# Query_time: 6.225232 Lock_time: 0.000122 Rows_sent: 21 Rows_examined: 8366
# Rows_affected: 0 Bytes_sent: 23616
SET timestamp=1636605307;
SELECT private_messages.id, username, folder, status, postdate, sender, subject, message, pm_img.image
FROM private_messages
LEFT JOIN pm_img
ON pm_img.id = private_messages.id
WHERE username='example' AND
folder='inbox' AND
(status = "New" OR status = "" OR status IS NULL) AND
COALESCE(pm_img.sorter,0) = 0
ORDER BY postdate DESC
LIMIT 21; ALTER TABLE private_messages
PARTITION BY RANGE (folder) (
PARTITION inbox VALUES LESS THAN (1),
PARTITION sent VALUES LESS THAN (2),
PARTITION deleted VALUES LESS THAN (3),
PARTITION other VALUES LESS THAN MAXVALUE,
) // in PHP
$partition = 'other';
if ($folder == 'inbox' || $folder == 'sent' || $folder == 'deleted') {
$partition = $folder;
}
$query = sprintf("SELECT * FROM private_messages PARTITION (%s) WHERE username='%s'",
mysqli_real_escape_string($partition),
mysqli_real_escape_string('example')
); SELECT private_messages.id, username, folder, status, postdate, sender, subject, message, pm_img.image
FROM private_messages
LEFT JOIN pm_img
ON
pm_img.id = private_messages.id AND
pm_img.sorter = 0
WHERE
username = 'example' AND
folder = 'inbox' AND
(status = "New" OR status = "" OR status IS NULL)
ORDER BY postdate DESC
LIMIT 21; $pm_query = <<<EOF
SELECT private_messages.id, username, folder, status, postdate, sender, subject, message, pm_img.image
FROM private_messages
WHERE
username = 'example' AND
folder = 'inbox' AND
(status = "New" OR status = "" OR status IS NULL)
ORDER BY postdate DESC
EOF;
$results = mysqli_query($pm_query, $dbh);
$arr = [];
$img_query = false;
if ($results)
while (list($id, $username, $folder, $status, $postdate, $sender, $subject, $message) = mysqli_fetch_row($results)) {
// there's probably a better way to put all of the data in an associative array, but you get what I mean
$arr[$id]['username'] = $username;
if ($img_query) $img_query .= ' OR ';
$img_query .= 'id=' . $id;
}
if ($img_query)
$img_query = 'SELECT * FROM pm_img WHERE (' . $img_query . ') and sorter=0';
$images = mysqli_result($img_query, $dbh);
if ($images)
while (list($img_id, $sorter, $image) = mysqli_fetch_row($images)) {
$arr[$img_id]['id'] = 1;
}