Hoe GROUPEN in deze query?
ik heb een query die per users de ingevulde vragen en de antwoorden list. Hoe zou ik in deze query kunnen groeperen zodat ik de users zie, daaronder hun vragen en antwoorden..
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT
u.user_name,
u.user_id,
q.question_name
a.answer_body
FROM
users AS u
INNER JOIN
answers AS a
ON
a.user_id = u.user_id
INNER JOIN
questions AS q
ON
q.question_id = a.question_id
ORDER BY
u.user_id, q.question_id
u.user_name,
u.user_id,
q.question_name
a.answer_body
FROM
users AS u
INNER JOIN
answers AS a
ON
a.user_id = u.user_id
INNER JOIN
questions AS q
ON
q.question_id = a.question_id
ORDER BY
u.user_id, q.question_id
In php binnen de while lus dan controleren wanneer het user_id verandert.
Bedankt!
Je krijgt -ingekort- dit als resultaat:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
user_id | question_name
1 | vraag 1
1 | vraag 2
1 | vraag 3
......
2 | vraag 1
2 | vraag 2
.. enz.
1 | vraag 1
1 | vraag 2
1 | vraag 3
......
2 | vraag 1
2 | vraag 2
.. enz.
Gewijzigd op 10/09/2012 13:42:46 door Ger van Steenderen
Miguel Stevens op 10/09/2012 13:26:03:
... moet het dan niet met een group concat? ...
GROUP BY gebruik je wanneer je berekeningen wil doen.
bv. het gemiddelde aantal punten van studenten; tellen hoeveel users 'Jan' heten, ...
Bekijken we even dit laatste voorbeeld.
Wat dan gebeurt, is dat je 1 record krijgt.
Alle records met naam = 'Jan' worden samengeperst tot 1 record.
1 record met naam = 'Jan'; en met de berekening. Nu, aangezien je slechts 1 record hebt, kan je onmogelijk de andere gegeves (bv. e-mailadres, GSM, ...) van de andere Jannen bekijken.
Wat in de praktijk gebeurt: het eerste record dat mySQL tegenkomt, wordt gebruikt voor de overige velden.
Gewijzigd op 10/09/2012 13:46:07 door Kris Peeters
Ger van Steenderen op 10/09/2012 13:40:06:
wat bedoel je dan met "In php binnen de while lus dan controleren wanneer het user_id verandert." hoe zou ik dat dan doen? bedankt alvast!
Toevoeging op 10/09/2012 14:52:08:
Kris Peeters op 10/09/2012 13:40:42:
GROUP BY gebruik je wanneer je berekeningen wil doen.
bv. het gemiddelde aantal punten van studenten; tellen hoeveel users 'Jan' heten, ...
Bekijken we even dit laatste voorbeeld.
Wat dan gebeurt, is dat je 1 record krijgt.
Alle records met naam = 'Jan' worden samengeperst tot 1 record.
1 record met naam = 'Jan'; en met de berekening. Nu, aangezien je slechts 1 record hebt, kan je onmogelijk de andere gegeves (bv. e-mailadres, GSM, ...) van de andere Jannen bekijken.
Wat in de praktijk gebeurt: het eerste record dat mySQL tegenkomt, wordt gebruikt voor de overige velden.
Miguel Stevens op 10/09/2012 13:26:03:
... moet het dan niet met een group concat? ...
GROUP BY gebruik je wanneer je berekeningen wil doen.
bv. het gemiddelde aantal punten van studenten; tellen hoeveel users 'Jan' heten, ...
Bekijken we even dit laatste voorbeeld.
Wat dan gebeurt, is dat je 1 record krijgt.
Alle records met naam = 'Jan' worden samengeperst tot 1 record.
1 record met naam = 'Jan'; en met de berekening. Nu, aangezien je slechts 1 record hebt, kan je onmogelijk de andere gegeves (bv. e-mailadres, GSM, ...) van de andere Jannen bekijken.
Wat in de praktijk gebeurt: het eerste record dat mySQL tegenkomt, wordt gebruikt voor de overige velden.
Aha! dat verklaard veel! dankje
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
//je hebt de querie uitgevoerd en gecontroleerd of ie gelukt is!!!
$user_id = -1;
while ($row = mysql_fetch_assoc($result)) {
if ($user_id != $row['user_id']) {
if ($user_id != -1) {
echo '</div>';
}
echo '<div class="box">
<div class="boxhead">
' . $row['user_name'] . '
</div>';
$user_id = $row['user_id'];
}
//hier kun je dan de vragen met antwoorden tonen
}
//je hebt de querie uitgevoerd en gecontroleerd of ie gelukt is!!!
$user_id = -1;
while ($row = mysql_fetch_assoc($result)) {
if ($user_id != $row['user_id']) {
if ($user_id != -1) {
echo '</div>';
}
echo '<div class="box">
<div class="boxhead">
' . $row['user_name'] . '
</div>';
$user_id = $row['user_id'];
}
//hier kun je dan de vragen met antwoorden tonen
}
$result = mysql_query("
SELECT
u.users_name,
u.users_id,
q.questions_name
a.answers_body
FROM
users AS u
INNER JOIN
answers AS a
ON
a.users_id = u.users_id
INNER JOIN
questions AS q
ON
q.questions_id = a.questions_id
ORDER BY
u.users_id, q.questions_id
");
$user_id = -1;
while ($row = mysql_fetch_assoc($result)) {
if ($user_id != $row['users_id']) {
if ($user_id != -1) {
echo '</div>';
}
echo '<div class="box">
<div class="boxhead">
' . $row['users_name'] . '
</div>';
$user_id = $row['users_id'];
}
//hier kun je dan de vragen met antwoorden tonen
}
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
//je hebt de querie uitgevoerd en gecontroleerd of ie gelukt is!!!
$user_id = -1;
while ($row = mysql_fetch_assoc($result)) {
if ($user_id != $row['user_id']) {
if ($user_id != -1) {
echo '</div>';
// hier accolade weg
echo '<div class="box">';
} // hier neerzetten
echo' <div class="boxhead">
' . $row['user_name'] . '
</div>';
$user_id = $row['user_id'];
}
//hier kun je dan de vragen met antwoorden tonen
}
//je hebt de querie uitgevoerd en gecontroleerd of ie gelukt is!!!
$user_id = -1;
while ($row = mysql_fetch_assoc($result)) {
if ($user_id != $row['user_id']) {
if ($user_id != -1) {
echo '</div>';
// hier accolade weg
echo '<div class="box">';
} // hier neerzetten
echo' <div class="boxhead">
' . $row['user_name'] . '
</div>';
$user_id = $row['user_id'];
}
//hier kun je dan de vragen met antwoorden tonen
}
Gewijzigd op 11/09/2012 10:16:40 door Eddy E
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\radar\index.php on line 35
Dan is je $result waarschijnlijk false, en dus is je query niet gelukt.
Hm. heb weinig ervaring met query's. heb er mij zitten op doodstaren op de query hierboven.. kheb die gecopy-paste en aangepast naar de velden in mijn db. maar toch komt hij false uit .. snap het niet
Wat je nu best doet, is even php vergeten en deze query te testen in phpMyadmin.
Je hebt ook niets van php-variabelen die verwerkt zijn in je query, dus je kan die query gewoon copy/pasten in phpMyadmin.
Daar krijg je dan een uitgebreidere foutmelding.
Toevoeging op 11/09/2012 13:09:21:
Syntax is juist nu, er ontbrak een komma hier
u.users_name,
u.users_id,
q.questions_name,
Zeg ... mijn reactie zou zijn om het zo te doen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
SELECT
u.user_name AS user_name,
u.user_id AS user_id,
q.question_name AS question_name,
a.answer_body AS answer_body
FROM
answers AS a
INNER JOIN
users AS u ON u.user_id = a.user_id
INNER JOIN
questions AS q ON q.question_id = a.question_id
ORDER BY
user_id, question_id
u.user_name AS user_name,
u.user_id AS user_id,
q.question_name AS question_name,
a.answer_body AS answer_body
FROM
answers AS a
INNER JOIN
users AS u ON u.user_id = a.user_id
INNER JOIN
questions AS q ON q.question_id = a.question_id
ORDER BY
user_id, question_id
Bij de FROM eerst de tabel zetten die de connectie maakt tussen de andere tabellen.
Ik denk dat dat iets duidelijker is, om uit te kunnen aan die JOIN'S. Misschien is het vooral een kwestie van smaak. (Iemand hier een mening over?)
Wat geen kwestie van smaak is, is jouw gebruik van aliassen op kolomnamen.
Je geeft dezelfde alias als de kolomnaam dus daarmee is de alias volledig overbodig.
Ja, die aliasen ... meer een kwestie van "better safe than sorry", van mijn kant.