MySQL heeft geen zin om te doen wat ik vraag

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Robert van der Leest

Robert van der Leest

05/02/2012 18:22:58
Quote Anchor link
Goedenavond,

Ik wilde zonet wat toevoegen aan mijn script, maar blijkbaar vind MySQL het moeilijk om de laatste reactie van een onderwerp te pakken. Ook pakt hij het verkeerde id en het begint ondertussen nogal vervelend te worden. Dit is mijn query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
    $result = mysqli_query($db, "
        SELECT t.title, t.id, t.laster, t.board, u.username, u.id, t.last_msg, t.last_date
            FROM " . $sfp['db_pref'] . "threads as t
            LEFT JOIN " . $sfp['db_pref'] . "users as u ON t.laster = u.id
            WHERE t.id='" . $id_msg . "'
            ORDER BY last_msg DESC
    ");

En dit geeft de tekst weer:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
    while($msginfo = mysqli_fetch_array($result))
        return '
            <a href="' . $sfp['forum_file'] . '?thread=' . $msginfo['id'] . '">' . $msginfo['title'] . '</a><br />
            By <a href="' . $sfp['forum_file'] . '?act=profile&u=' . sfp_get_id($msginfo['username']) . '">' . $msginfo['username'] . '</a><br />
            On ' . date("F j, Y, g:i a", $msginfo['last_date']);

Blijkbaar pakt hij alleen het bericht met het id "1" en ik kan de fout echt niet vinden. Ik denk dat het komt omdat het id van de gebruiker 1 is, maar ik kan er echt niet meer achter komen. Alvast bedankt voor de reacties!

Robert
 
PHP hulp

PHP hulp

03/12/2024 18:55:14
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

05/02/2012 18:38:34
Quote Anchor link
Zet de query string in een aparte string en echo hem. Dan kun je zien wat er gebeurt.
Lijkt me sterk dat MySQL zomaar ergens iets vandaan haalt.
 
Robert van der Leest

Robert van der Leest

05/02/2012 18:43:09
Quote Anchor link
Bedankt voor de reactie :D Dit is de output van de query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
        SELECT t.title, t.id, t.laster, t.board, u.username, u.id, t.last_msg, t.last_date
            FROM sfp_threads as t
            LEFT JOIN sfp_users as u ON t.laster = u.id
            WHERE t.id='26'
            ORDER BY last_msg DESC
Gewijzigd op 05/02/2012 18:44:15 door Robert van der Leest
 
Erwin H

Erwin H

05/02/2012 18:50:34
Quote Anchor link
Ten eerste wat staat er in last_msg en wat als je op datum van de berichten sorteerd?
 
Robert van der Leest

Robert van der Leest

05/02/2012 18:55:15
Quote Anchor link
Heel erg bedankt voor de reactie :) In het nieuwste topic staat "87948739485" als last_msg en in het oudste topic staat "34534534" als last_msg. Ik weet dat het geen timestamps zijn, maar ik wist zo even niet hoe ik zo snel aan een timestamp moest komen dus ik heb maar wat bedacht totdat ik een postformulier heb. Op datum sorteren heb ik al, maar op de een of andere manier pakt ie 'm niet.
 
Erwin H

Erwin H

05/02/2012 18:58:49
Quote Anchor link
Maar is het wel een integer, of een string? Als het een string is loopt dat sorteren namelijk snel in de soep.
 
Robert van der Leest

Robert van der Leest

05/02/2012 19:03:27
Quote Anchor link
Net veranderd naar int, helaas geen effect :(
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

05/02/2012 19:07:02
Quote Anchor link
Wat doet trouwens die return in de while loop?
 
Robert van der Leest

Robert van der Leest

05/02/2012 19:08:22
Quote Anchor link
Die return stuurt de tekst die is aangemaakt met die functie terug naar het vakje waar de tekst weergegeven moet worden. :)
 
 - Diov  -

- Diov -

05/02/2012 19:08:23
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
?>


Misschien zie je een error?
 
- SanThe -

- SanThe -

05/02/2012 19:17:35
Quote Anchor link
Robert van der Leest op 05/02/2012 19:08:22:
Die return stuurt de tekst die is aangemaakt met die functie terug naar het vakje waar de tekst weergegeven moet worden. :)


Dat is dus altijd het eerst gevonden record.
 
Jacco Brandt

Jacco Brandt

05/02/2012 19:46:45
Quote Anchor link
Verander return eens in echo?
 
Robert van der Leest

Robert van der Leest

06/02/2012 16:21:10
Quote Anchor link
Gedaan, alleen ik krijg maar 1 resultaat en dat is het oudste topic. :( Het veranderen van de soorteermethode helpt ook niet
 
Erwin H

Erwin H

06/02/2012 16:31:20
Quote Anchor link
Geef eens het hele script, of althans de delen die te maken hebben met de query, het uitlezen en het printen naar het scherm.
 
Robert van der Leest

Robert van der Leest

07/02/2012 15:44:33
Quote Anchor link
Dit is de last post functie of altans dat van de query (sfp_last_post):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    // Get the message id, user id etc
    $result = mysqli_query($db, "
        SELECT t.title, t.id, t.laster, t.board, u.username, u.id, t.last_msg, t.last_date
            FROM " . $sfp['db_pref'] . "threads as t
            LEFT JOIN " . $sfp['db_pref'] . "users as u ON t.laster = u.id
            LEFT JOIN " . $sfp['db_pref'] . "boards as b ON t.board = b.id_board
            WHERE t.id='" . $id_msg . "'
            ORDER BY b.last_msg DESC
    ");

    // Now return the information
    while($msginfo = mysqli_fetch_array($result))
        echo '
            <a href="' . $sfp['forum_file'] . '?thread=' . $msginfo['id'] . '">' . $msginfo['title'] . '</a><br />
            By <a href="' . $sfp['forum_file'] . '?act=profile&u=' . sfp_get_id($msginfo['username']) . '">' . $msginfo['username'] . '</a><br />
            On ' . date("F j, Y, g:i a", $msginfo['last_date']);

En dit is de query die de topics laat zien:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
    $result = mysqli_query($db, "
        SELECT t.id, t.title, t.thread, t.closed, t.sticky, t.last_msg,
            t.replies, t.views, u.id, u.username, t.board
        FROM " . $sfp['db_pref'] . "threads as t
        LEFT JOIN " . $sfp['db_pref'] . "users as u on t.starter = u.id
        LEFT JOIN " . $sfp['db_pref'] . "users as su on t.laster = su.id
        WHERE t.board='" . $board . "' AND thread='yes'
    ");

En dit laat de topics zien:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
    while($thread = mysqli_fetch_assoc($result))
        echo '
            <tr>
                <td width="50%"><a href="' . $sfp['forum_file'] . '?thread=' . $thread['id'] . '">' . $thread['title'] . '</a><br />Posted by <a href="' . $sfp['forum_file'] . '?act=profile&u=' . sfp_get_id($thread['username']) . '">' . $thread['username'] . '</a></td>
                <td width="10%" align="middle">' . $thread['replies'] . '</td>
                <td width="10%" align="middle">' . $thread['views'] . '</td>
                <td width="30%">' . sfp_lastreply($thread['last_msg']) . '</td>
            </tr>';
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

07/02/2012 16:36:26
Quote Anchor link
Zoals ik het nu zie heb je alle replies in de threads tabel, dit kan je beter met een aparte tabel doen. Je kan dan vanuit de reply tabel gaan selecteren en sorteren op de datum, bv (ingekort):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT
    r.reply_date,
    t.title,
    u.user_name,
    b.board
FROM
    replies AS r
INNER JOIN
    threads AS t ON r.thread_id = t.thread_id
    users AS u ON t.user_id = u.user_id
    boards AS b ON t.board_id = b.board_id
GROUP BY
    r.thread_id
ORDER BY
    r.reply_date DESC
LIMIT 10
 
Robert van der Leest

Robert van der Leest

07/02/2012 17:44:50
Quote Anchor link
Oke mensen ik schaam me heel erg, maar blijkbaar had ik het id gewoon verkeerd ingesteld in de database. =/ Toch iedereen ontzettend bedankt voor het helpen :)

*opgelost*
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.