[MYSQL] 2 Tabellen samenvoegen tot een array

Pagina: 1
Acties:

  • GewoonNico
  • Registratie: April 2003
  • Laatst online: 06:59
Hallo Mensen,

Ik heb 2 mysql tabellen, en ze zien er zo uit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql_query("CREATE TABLE forum_topic (id INT NOT NULL AUTO_INCREMENT ,
                                            id_forum INT NOT NULL, 
                                            id_user INT NOT NULL, 
                                            date DECIMAL(10,0) NOT NULL, 
                                            view DECIMAL(10,0) NOT NULL, 
                                            locked TINYINT(1) NOT NULL ,
                                            subject VARCHAR(100) NOT NULL, 
                                            message TEXT NOT NULL,
                                            PRIMARY KEY (id))") or die(mysql_error());
mysql_query("CREATE TABLE forum_reply (id INT NOT NULL AUTO_INCREMENT ,
                                            id_topic INT NOT NULL, 
                                            id_user INT NOT NULL, 
                                            date DECIMAL(10,0) NOT NULL, 
                                            subject VARCHAR(100) NOT NULL, 
                                            message TEXT NOT NULL,
                                            PRIMARY KEY (id))") or die(mysql_error());

Nu wil ik maar 1 query gebruiken om het topic uit te lezen.
Ik heb dit geprobeerd met LEFT JOIN, maar dit was helaas niet succesvol gelukt.

De bedoeling is dat ik alle waarden als volgt uit de database krijg

code:
1
2
3
4
5
6
7
ID | ID_USER | DATE | SUBJECT | MESSAGE
1  | 1             |234234| Test          | dit is een testbericht
2  | 3             |242423| re:test       | dit is de 1e reactie
4  | 3             |234234| re:test       | dit is de 2e reactie
5  | 1             |234243| re:test       | etc.
7  | 3             |234233| re:test
45| 1             |234234| re:test


Dit kan ik dan makkelijk uitlezen met een php while() loopje.
Kan iemand mij opweg helpen met de juiste query?

Dit is een van de querie's die ik heb geprobeerd:

SELECT t.*,r.*
FROM forum_topic AS t
LEFT JOIN forum_reply AS r
ON (r.id_topic = t.id)
WHERE t.id='1'
GROUP BY t.id, r.id

  • mindcrash
  • Registratie: April 2002
  • Laatst online: 22-11-2019

mindcrash

Rebellious Monkey

Je maakt het jezelf veels te moeilijk.

Hint: kijk eens naar de opbouw van je database en bedenk dat een topicstart hetzelfde is als een reply (shit, nu heb ik al iets teveel weggegeven geloof ik) ;)

"The people who are crazy enough to think they could change the world, are the ones who do." -- Steve Jobs (1955-2011) , Aaron Swartz (1986-2013)


  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 09-05 10:16

ripexx

bibs

partypas schreef op donderdag 31 maart 2005 @ 12:35:
[..]
SQL:
1
2
3
4
5
6
SELECT t.*,r.* 
FROM forum_topic AS t
 LEFT JOIN forum_reply AS r
  ON (r.id_topic = t.id)
WHERE t.id='1'
GROUP BY t.id, r.id
Waarom gebruik je een group by? Dat is A nergens voor nodig en B is het nog eens fout fout, mysql zal er niet moeilijk overdoen maar een Oracle of Sql server vinden het echt niet goed.

de volgense SQl query zal omgeveer doen wat jij wil
SQL:
1
2
3
4
5
SELECT t.*, r.*
FROM forum_reply as r
  LEFT JOIN forum_topic as t
     ON t.id = r.id_topic
WHERE t.id = 1

buit is binnen sukkel


Verwijderd

Idd, de oorzaak bij het porbleem aanpakken.

Als je het nou veranderd in zoiets:
Topic
-id
-titel
-enz

Replies
-id
-userid
-message
-date

Dan wordt het gelijk een stuk makkelijker. ;)

[edit]De Topic start is dan de eerste reply

[ Voor 11% gewijzigd door Verwijderd op 31-03-2005 12:49 ]


  • GewoonNico
  • Registratie: April 2003
  • Laatst online: 06:59
in een vorig forum had ik deze samen gevoegd. Maar dit vond ik achteraf toch minder handig... Maja, als ik het me zo bekijk, was het waarschijnlijk toch veel handiger.

  • GewoonNico
  • Registratie: April 2003
  • Laatst online: 06:59
Verwijderd schreef op donderdag 31 maart 2005 @ 12:48:
Idd, de oorzaak bij het porbleem aanpakken.

Als je het nou veranderd in zoiets:
Topic
-id
-titel
-enz

Replies
-id
-userid
-message
-date

Dan wordt het gelijk een stuk makkelijker. ;)
Het is geen probleem om 2 querie's te gebruiken. Maar dan moet je ook 2x zoveel checks doen enzo.
Ik heb mijn structuur nu als volgt:

PHP:
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
<?
/*****************************************************************************
 *
 *  Copyright            : Copyright (C) Nico Habets
 *  Email                : nhabets@xs4all.nl
 *  
 *  
 *  Disclaimer:
 *  Niets uit dit script mag zonder toestemming van de maker van deze
 *  scripting gekopieerd, of doorverkocht worden aan derden. De maker van deze
 *  scripting blijft ten alle tijden copyright op dit product houden. De 
 *  scripting is ter beschikking gesteld door Nico Habets.
 *  Dit programma is GEEN vrije software, en mag niet worden doorverkocht en/
 *  of gewijzigd worden tenzij de eigenaar toestemming hiervoor heeft verleend
 *
 *****************************************************************************/
if (!defined("INSITE")) { die("Hacking Attempt!"); }

$topicq = mysql_query("SELECT * FROM forum_topic WHERE id='".$_GET['id']."'") or die(mysql_error());

$_SET['propage'] = "1";

if (!mysql_num_rows($topicq))
    {
    $_SESSION['message'] = "Het bericht is niet gevonden!";
    header("location: ?pid=forum/home");
    }
else
    {
    $topic = mysql_fetch_array($topicq);
    $pagehtml = pagelist(mysql_num_rows(mysql_query("SELECT id FROM forum_reply WHERE id_topic='".$topic['id']."'")),$_SET['propage']);
    echo("<h1>[img]\"images/forum.gif\">[/img]
        <table style=\"width:100%\" cellspacing=\"0\">
        <tr>
            <td colspan=\"2\">".$pagehtml."</td>
        </tr>");
    
    if ($_SESSION['message'])
        {
        echo("<div id=\"notice\">".$_SESSION['message']."</div><br>");
        $_SESSION['message'] = "";
        }
    if ($_GET['from'] == 0)
        {
        replyinfo($topic['id_user']);
        echo("<tr>
                <td>
                    <h3>[img]\"images/viewuser_".$_USERARRAY[$topic['id_user']]['sex'].".gif\">[/img]
                </td>
                <td>
                    <h4>
                        [img]\"images/quote.gif\"[/img]
                        [img]\"images/reply.gif\"[/img]
                        Geplaatst op: ".makedate($topic['date'],1)." - ".$topic['subject']."
                    </h4>
                </td>
            </tr>
            <tr>
                <td width=\"100\">
                    ".$_USERARRAY[$topic['id_user']]['city']."
                    ".$_USERARRAY[$topic['id_user']]['online']."
                    ".$_USERARRAY[$topic['id_user']]['avatar']."
                </td>
                <td>
                    ".makeup($topic['message'])."
                    <div id=\"signature\">".$_USERARRAY[$topic['id_user']]['signature']."</div>
                </td>
            </tr>");
        }

    $messageq = mysql_query("SELECT * FROM forum_reply WHERE id_topic='".$topic['id']."' ORDER BY date LIMIT ".$_GET['from'].", ".$_SET['propage']."");
    while($topic = mysql_fetch_array($messageq))
        {
        replyinfo($topic['id_user']);
        echo("<tr>
                <td>
                    <h3>[img]\"images/viewuser_".$_USERARRAY[$topic['id_user']]['sex'].".gif\">[/img]
                </td>
                <td>
                    <h4>
                        [img]\"images/quote.gif\"[/img]
                        [img]\"images/reply.gif\"[/img]
                        Geplaatst op: ".makedate($topic['date'],1)." - ".$topic['subject']."
                    </h4>
                </td>
            </tr>
            <tr>
                <td width=\"100\">
                    ".$_USERARRAY[$topic['id_user']]['city']."
                    ".$_USERARRAY[$topic['id_user']]['online']."
                    ".$_USERARRAY[$topic['id_user']]['avatar']."
                </td>
                <td>
                    ".makeup($topic['message'])."
                    <div id=\"signature\">".$_USERARRAY[$topic['id_user']]['signature']."</div>
                </td>
            </tr>");
        }
    echo("<tr>
            <td colspan=\"2\">".$pagehtml."</td>
        </tr>
        </table>");
    }

Het zou toch veel mooier zijn als je regel 45 t/m 69 kon knippen ? ;)

Verwijderd

Ik snap niet wat je precies bedoeld. Alle posts zitten nu in de tabel replies.
En zo kun je heel handig in 1 keer alle posts ophalen van het topic?

[ Voor 5% gewijzigd door Verwijderd op 31-03-2005 13:03 ]


  • GewoonNico
  • Registratie: April 2003
  • Laatst online: 06:59
Ik heb de boel al omgebouwd. ik gebruik nu 2 tabel voor topic's en reacties.
Pagina: 1