Versio

MySql query probleem

Overzicht Reageren

Pagina: 1 2 volgende »

Milo

Milo

07/12/2009 17:20:00
Quote Anchor link
Hey,

Ik ben bezig met mijn forum en daarbij moet het volgende gedaan worden op de pagina Topiclist.php

Alle topics moet uit de database gehaald worden bij desbetreffende sub_id, dit is niet zo moeilijk en lukt ook gewoon:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$sql
= mysql_query("
                    SELECT
                        *
                    FROM
                        topic
                    WHERE
                        sub_id = '"
.mysql_real_escape_string($_GET['sub_id'])."'
                   "
);
?>


Alleen nu het probleem:
Hij moet gaan ordenen op de last post...
hoe de h*ll krijg ik het voor elkaar om eerst alle post nog even op te halen en dan daarmee te ordenen?

En dan probleem 2:
Hij moet dan ook nog eens kijken naar de status van het topic, alleen als de status nr 2 heeft moet dat topic bovenin blijven deze is namelijk een sticky.

Iemand een idee of een duwtje in de goede richting?

Gr,
 
PHP hulp

PHP hulp

25/05/2012 06:50:35
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
- SanThe -

- SanThe -

07/12/2009 17:26:00
Quote Anchor link
ORDER BY
 
Mr.Ark

Mr.Ark

07/12/2009 17:28:00
Quote Anchor link
Zoiets?

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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?PHP

# Query
$Query =
"
    SELECT
        veld1,
        veld2,
        veld3
    FROM
        topic
    WHERE
        sub_id = '"
.intval($_GET['sub_id'])."'
    ORDER BY
        datum
    DESC
"
;

# Result of query
$Result = mysql_query($Query);

# Kijken of de query is gelukt
if(!$Result)
{

    # Foutje in query
    echo 'An error occured, error: '.mysql_error();
}

else
{
    # Kijken of er wel resultaten zijn
    if(mysql_num_rows($Result) == 0)
    {

        # Geen resultaten
        echo 'No results found in database.';
    }

    else
    {
        # Loop uitvoeren
        while($Row = mysql_fetch_assoc($Result))
        {

            # Kijken naar de status
            if($Row['status'] == 2)
            {

                # Laat hier je stickies zien
            }
            
            # Laat hier de rest van de topics zien
        }
    }
}


?>
Gewijzigd op 01/01/1970 01:00:00 door Mr.Ark
 
Milo

Milo

07/12/2009 17:32:00
Quote Anchor link
ik begrijp dat order by nodig is, sorry vergeten te melden
maar die posts staan in een andere tabel hoe kan ik ordenen op iets dat in een andere tabel staat

ik dacht aan:

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
17
18
19
20
21
22
23
24
25
<?php

$sql
= mysql_query("
                    SELECT
                        *
                    FROM
                        topic
                    WHERE
                        sub_id = '"
.mysql_real_escape_string($_GET['sub_id'])."'
                    ORDEN BY
                        (
                        SELECT
                            datum
                        FROM
                            posts
                        WHERE
                            sub_id = '"
.mysql_real_escape_string($_GET['sub_id'])."'
                        AND
                            topic_id = topic.id
                        ORDER BY
                            datum
                        DESC
                        )
                   "
);
?>


of toch niet?
Gewijzigd op 01/01/1970 01:00:00 door Milo
 
Mr.Ark

Mr.Ark

07/12/2009 17:41:00
Quote Anchor link
Ik ben niet echt een kei in mysql query's maar ik ga toch een poging wagen.

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
    a.veld1,
    a.veld2,
    b.veld1,
    b.veld2
FROM
    tabel1 AS a
INNER JOIN
    tabel2 AS b
ON
    b.ID = a.ID
WHERE
    a.sub_id = '".intval($_GET['sub_id'])."'
ORDER BY
    b.datum
DESC
Gewijzigd op 01/01/1970 01:00:00 door Mr.Ark
 
Milo

Milo

07/12/2009 17:54:00
Quote Anchor link
Helaas, hij werkt niet...
Maar misschien licht het aan mijn invulling:

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
$sql = mysql_query("
                    SELECT
                        a.*,
                        b.*,
                    FROM
                        topic AS a
                    INNER JOIN
                        posts AS b
                    ON
                        b.topic_id = a.id
                    WHERE
                        a.sub_id = '".mysql_real_escape_string($_GET['sub_id'])."'
                    ORDER BY
                        b.datum
                    DESC
                   ");
 
Mr.Ark

Mr.Ark

07/12/2009 18:02:00
Quote Anchor link
Quote:
Helaas, hij werkt niet...


Welke fout geeft ie aan? (foutenafhandeling)
 
Milo

Milo

07/12/2009 18:13:00
Quote Anchor link
Geen fout,
hij gaat gewoon door maar hij geeft alle velden dubbel...

Als je naar:
http://after-party.nl/Forum/
gaat en inlogt met:
phphulp
123poep

en dan gaat naar de topic pagina kun je het zien...

Ah nu krijg ik wel fouten XD zal eff mysql_error doen
Gewijzigd op 01/01/1970 01:00:00 door Milo
 
Mr.Ark

Mr.Ark

07/12/2009 18:17:00
Quote Anchor link
Ik zie nog een typo, om ON moeten nog haakjes ( ), dus ON ( b.topic_id = a.id )
 
Milo

Milo

07/12/2009 18:53:00
Quote Anchor link
Gedaan en nog steeds hetzelfde:
Die:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /customers/after-party.nl/after-party.nl/httpd.www/Forum/Topiclist.php on line 35

En

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /customers/after-party.nl/after-party.nl/httpd.www/Forum/Topiclist.php on line 115
 
Mr.Ark

Mr.Ark

07/12/2009 18:55:00
Quote Anchor link
En als je nou veld1, veld2 (wel jouw velden van jouw tables) gebruikt?, dus niet met de a en b ervoor.
 
Milo

Milo

07/12/2009 18:57:00
Quote Anchor link
dus overal de a. en b. weg? en dit: ON (b.topic_id = a.id) ook weg?
 
Mr.Ark

Mr.Ark

07/12/2009 19:00:00
Quote Anchor link
Quote:
dus overal de a. en b. weg?


Ja in je SELECT

Quote:
En dit: ON (b.topic_id = a.id) ook weg?


Nee, die horen daar
Gewijzigd op 01/01/1970 01:00:00 door Mr.Ark
 
Milo

Milo

07/12/2009 19:00:00
Quote Anchor link
dit dus:

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
$sql1 = mysql_query("
                    SELECT
                        *
                    FROM
                        topic AS a
                    INNER JOIN
                        posts AS b
                    ON
                        (b.topic_id = a.id)
                    WHERE
                        a.sub_id = '".mysql_real_escape_string($_GET['sub_id'])."'
                    ORDER BY
                        b.datum
                    DESC
                   ");
Gewijzigd op 01/01/1970 01:00:00 door Milo
 
Mr.Ark

Mr.Ark

07/12/2009 19:02:00
Quote Anchor link
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
    ietsvantabel1,
    ietsvantabell1,
    ietsvantabel2,
    ietsvantabell2
FROM
    tabel1 AS a
INNER JOIN
    tabel2 AS b
ON
    b.ID = a.ID
WHERE
    a.sub_id = '".intval($_GET['sub_id'])."'
ORDER BY
    b.datum
DESC


Edit:


Een id is altijd een cijfer, gebruik daarvoor (int) of intval()
Gewijzigd op 01/01/1970 01:00:00 door Mr.Ark
 
- SanThe -

- SanThe -

07/12/2009 19:03:00
Quote Anchor link
Foutafhandeling inbouwen en de error in een echo doet wonderen. De error van de query geeft namelijk precies aan waar het fout gaat.
 
Milo

Milo

07/12/2009 19:15:00
Quote Anchor link
NA dit is me script:
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
<?php
session_start();

// Database connectie maken
include('config.php');

// Sessie aanmaken herhalen
$_SESSION['login'] = $_SESSION['login'];

// Functies includen
include('Functies.php');

// Stylesheet koppelen
echo '<link href="CSS/Forum.css" rel="stylesheet" type="text/css">';

// Alles uit database halen
$sql1 = mysql_query("
                    SELECT
                        *,
                        *
                    FROM
                        topic AS a
                    INNER JOIN
                        posts AS b
                    ON
                        (b.topic_id = a.id)
                    WHERE
                        a.sub_id = '"
.intval($_GET['sub_id'])."'
                    ORDER BY
                        b.datum
                    DESC
                   "
);
// Aantal per pagina en aangeven hoeveel paginas er zijn
$per_pag = 15;
$aant_pag =  ceil(mysql_num_rows($sql1) / $per_pag);

// Huidige pagina een waarde geven
if(isset($_GET['nr']))
{

    $pagina = $_GET['nr'];
}

else
{
    $pagina = 0;
}


// Bepalen vanaf welk rec we uit de db meoten halen
$van = $pagina * $per_pag;
    
// Gegevens van de huidige pagina uit de database halen
$sql2 = mysql_query("
                    SELECT
                        *,
                        *
                    FROM
                        topic AS a
                    INNER JOIN
                        posts AS b
                    ON
                        (b.topic_id = a.id)
                    WHERE
                        a.sub_id = '"
.intval($_GET['sub_id'])."'
                    ORDER BY
                        b.datum
                    DESC
                    LIMIT
                        $van, $per_pag
                   "
);
echo '<div class="Forum">';

    // Alle pagina nummers echoën
    if($aant_pag > 1)
    {

        echo '<div class="navigatie">';
            if($pagina > 0)
            {

                echo '<a class="nav" href="?sub_id='.$_GET['sub_id'].'&nr='.($pagina - 1).'">Prev</a> ';
            }

            for($nmr = 0; $nmr < $aant_pag; $nmr++)
            {

                if($_GET['nr'] == $nmr)
                {

                    echo '<b>'.($nmr + 1).'</b>';
                }

                else
                {
                    echo '<a class="nav" href="?sub_id='.$_GET['sub_id'].'&nr='.$nmr.'">'.($nmr + 1).'</a>';
                }

                if($nmr < $aant_pag - 1) {
                    echo ", ";
                }
            }

            if($aant_pag > $pagina + 1)
            {

                echo ' <a class="nav" href="?sub_id='.$_GET['sub_id'].'&nr='.($pagina + 1).'">Next</a>';
            }

        echo '</div>';
    }

    
    // Hoofdcategorie titel echoën
    echo '<p class="titel-balk">Huiswerk</p>';
    
    // Hoe wie wat waar balk.
    echo '<div class="top-info-balk">';
        echo '<p class="top-info-klein"></p>';
        echo '<p class="top-info-groot">Topic</p>';
        echo '<p class="top-info-klein">Replies</p>';
        echo '<p class="top-info-middel1">Author</p>';
        echo '<p class="top-info-klein">Views</p>';
        echo '<p class="top-info-middel2">Last post</p>';
    echo '</div>';
    
    if(!mysql_query($sql1) OR !mysql_query($sql2))
    {

        if(mysql_num_rows($sql1) > 0)
        {

            // De gegevens echoën
            while($rec2 = mysql_fetch_array($sql2))
            {

                // Aantal posts ophalen
                $cnt = mysql_query("SELECT * FROM posts WHERE topic_id = '".$rec2['id']."'");
                // Last post ophalen
                $sql3 = mysql_query("SELECT * FROM posts WHERE topic_id = '".$rec2['id']."' ORDER BY id DESC LIMIT 1");
                $rec3 = mysql_fetch_array($sql3);
            
                    // Alles weergeven
                echo '<div class="top-frm-balk">';
                    /*
                    TopStatus
                        [ 0 ] => Gewoon
                        [ 1 ] => Op slot
                        [ 2 ] => Sticky (Toekomstig)
                        [ 3 ] => Verhuisd
                    */

                
                    echo '<p class="top-frm-klein">';
                            if($_SESSION['login'] == $rec3['poster_id'])
                            {

                                if($rec2['status'] == '2')
                                {

                                    echo '<img style="margin-top: 6.5px;" src="CSS/IMAGES/TopStatus4.gif">';
                                }

                                elseif($rec2['status'] == '1')
                                {

                                    echo '<img style="margin-top: 6.5px;" src="CSS/IMAGES/TopStatus3.gif">';
                                }

                                elseif($rec2['status'] == '3')
                                {

                                    echo '<img style="margin-top: 6.5px;" src="CSS/IMAGES/TopStatus5.gif">';
                                }

                                elseif($rec2['status'] == '0')
                                {

                                    echo '<img style="margin-top: 6.5px;" src="CSS/IMAGES/TopStatus2.gif">';
                                }
                            }

                            else
                            {
                                if($rec2['status'] == '2')
                                {

                                    echo '<img style="margin-top: 6.5px;" src="CSS/IMAGES/TopStatus4.gif">';
                                }

                                elseif($rec2['status'] == '1')
                                {

                                    echo '<img style="margin-top: 6.5px;" src="CSS/IMAGES/TopStatus3.gif">';
                                }

                                elseif($rec2['status'] == '3')
                                {

                                    echo '<img style="margin-top: 6.5px;" src="CSS/IMAGES/TopStatus5.gif">';
                                }

                                elseif($rec2['status'] == '0')
                                {

                                    echo '<img style="margin-top: 6.5px;" src="CSS/IMAGES/TopStatus1.gif">';
                                }
                            }

                    echo '</p>';
                    
                    echo '<p class="top-frm-groot">';
                    echo '<a class="toptitel" href="Showtopic.php?sub_id='.$_GET['sub_id'].'&topic_id='.$rec2['id'].'">'.$rec2['titel'].'</a><br>';
                    echo '</p>';
                
                    echo '<p class="top-frm-klein">'.mysql_num_rows($cnt).'</p>';
                    echo '<p class="top-frm-middel1">'.gebruikersnaam($rec2['poster_id']).'</p>';
                    echo '<p class="top-frm-klein">'.$rec2['views'].'</p>';
                    echo '<p class="top-frm-middel2">'.gebruikersnaam($rec3['poster_id']).'<br>'.$rec3['datum'].'</p>';
                echo '</div>';
            }
        }

        else
        {
            echo '<p class="error">Helaas, er zijn nog geen topics in deze categorie</p>';
        }
    }

    else
    {
        echo '<p class="error">Helaas, er is een fout opgetreden bij een van de query´s</p>';
        echo '<br>Query 1:<br>';
        echo mysql_error($sql1);
        echo '<br>Query 2:<br>';
        echo mysql_error($sql2);
    }

    
    // Alle pagina nummers echoën
    if($aant_pag > 1)
    {

        echo '<div class="navigatie">';
            if($pagina > 0)
            {

                echo '<a class="nav" href="?sub_id='.$_GET['sub_id'].'&nr='.($pagina - 1).'">Prev</a> ';
            }

            for($nmr = 0; $nmr < $aant_pag; $nmr++)
            {

                if($_GET['nr'] == $nmr)
                {

                    echo '<b>'.($nmr + 1).'</b>';
                }

                else
                {
                    echo '<a class="nav" href="?sub_id='.$_GET['sub_id'].'&nr='.$nmr.'">'.($nmr + 1).'</a>';
                }

                if($nmr < $aant_pag - 1) {
                    echo ", ";
                }
            }

            if($aant_pag > $pagina + 1)
            {

                echo ' <a class="nav" href="?sub_id='.$_GET['sub_id'].'&nr='.($pagina + 1).'">Next</a>';
            }

        echo '</div>';
    }

    
if(isset($_SESSION['login']))
{

    echo '</div><br>';
    echo '<a href="Addtopic.php?sub_id='.$_GET['sub_id'].'"><img src="CSS/IMAGES/Addtopic.png" border="0"></a>';
}

else
{
    echo '<p class="error">Uw moet inloggen voor u een topic kunt aanmaken.</p>';
    echo '</div>';
}

?>


dus zoals je ziet zit er wel degelijk foutafhandeling in...
 
- SanThe -

- SanThe -

07/12/2009 19:25:00
Quote Anchor link
Regel 17 geen foutafhandeling
Regel 51 geen foutafhandeling
Regel 113 onmogelijk
Regel 121 geen foutafhandeling
Regel 123 geen foutafhandeling
 
Milo

Milo

07/12/2009 19:27:00
Quote Anchor link
R 17, en 51 worden gecheckt bij de onmogelijke regel XD

en 121 en 123 hebben indd geen foutafhandeling maar het gaat momenteel nu over de andere query's...

Wat is er onmogelijk aan als ik vragen mag?
 
- SanThe -

- SanThe -

07/12/2009 19:34:00
Quote Anchor link
Hier voer je 2 query's uit.
$sql1 = mysql_query(...);
$sql2 = mysql_query(...);

Dus daar zit nu een resultset in en dan voer je daar weer een query op uit.
if(!mysql_query($sql1) OR !mysql_query($sql2))

Dat gaat niet lukken.
 
Milo

Milo

07/12/2009 19:36:00
Quote Anchor link
Aaah

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
17
18
19
20
$Query =
"
    SELECT
        veld1,
        veld2,
        veld3
    FROM
        topic
    WHERE
        sub_id = '".intval($_GET['sub_id'])."'
    ORDER BY
        datum
    DESC
";

# Result of query
$Result = mysql_query($Query);

# Kijken of de query is gelukt
if(!$Result) {......


Maar dit heeft toch hetzelfde effect?
 

Pagina: 1 2 volgende »



Overzicht Reageren