[php/mysql] Onnodige resultaten weergegeven.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
In mijn viewforum.php laat ik de topics zien, dus de topictitle, topic lastreply, topic starter, time,..

Dit doe ik door de volgende query:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php

$sql ="
SELECT 
 topic.topic_id, 
 topic.title, 
 topic.type AS type, 
 topic.topic_last_post_id AS last_post_id, 
 topic_starter, reply.topic_id AS topic_id 
FROM reply, topic 
WHERE topic.cat='1' AND topic.topic_id=reply.topic_id 
ORDER BY topic.type DESC, topic.last_post_id DESC, reply.time DESC LIMIT 0, 30";

$query = mysql_query($sql);

?>


Als ik de data dan uitlees krijg ik dit bijvoorbeeld:

topic_id title type last_post_id topic_starter topic_id
2 hoi 1 0 Kris 2
2 hoi 1 0 Kris 2
2 hoi 1 0 Kris 2
2 hoi 1 0 Kris 2

4 Keer de titel dus, maar hij moet maar 1x de titel uitlezen!

Nu heb ik deze oplossing:

PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php

if(!$newtitle) {

$newtitle = $row['title'];

} else {
$newtitle = "";
}

?>


Dit vind ik nogal een domme oplossing, kan ik de query niet gewoon aanpassen?
mvg

Kris.

[ Voor 4% gewijzigd door Verwijderd op 18-05-2003 10:15 ]


Acties:
  • 0 Henk 'm!

  • Rotjeknor
  • Registratie: April 2001
  • Laatst online: 01-04-2023
Afsplitsen, eerst titel ophalen en dan de rest...

Ook Knor is aangestoken met het ligfietsvirus!


Acties:
  • 0 Henk 'm!

  • dArtagnan
  • Registratie: Mei 2002
  • Laatst online: 23-08 22:47

dArtagnan

Een voor allen, allen voor een

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php 

$sql =" 
SELECT 
topic.topic_id, 
distinct topic.title, 
topic.type AS type, 
topic.topic_last_post_id AS last_post_id, 
topic_starter, reply.topic_id AS topic_id 
FROM reply, topic 
WHERE topic.cat='1' AND topic.topic_id=reply.topic_id 
ORDER BY topic.type DESC, topic.last_post_id DESC, reply.time DESC LIMIT 0, 30"; 

$query = mysql_query($sql); 

?> 


gebruik distinct voor de titel
ik weet alleen niet meer of de topic.title dan tussen haakjes moet
http://www.w3schools.com/sql/sql_distinct.asp

Acties:
  • 0 Henk 'm!

Verwijderd

nope hoeft niet tussen haakjes

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Sql:
Something is wrong in your syntax près de 'distinct topic.title, topic.type AS type, topic.topic_last_post_' à la ligne 1

Die error krijg ik dan...

Acties:
  • 0 Henk 'm!

  • dArtagnan
  • Registratie: Mei 2002
  • Laatst online: 23-08 22:47

dArtagnan

Een voor allen, allen voor een

Verwijderd schreef op 18 mei 2003 @ 10:55:
Sql:
Something is wrong in your syntax près de 'distinct topic.title, topic.type AS type, topic.topic_last_post_' à la ligne 1

Die error krijg ik dan...
probeer het eens met haakjes.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
werkt ook niet:

Sql:
Something is wrong in your syntax près de 'distinct (topic.title), topic.type AS type, topic.topic_last_pos' à la ligne 1

Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php

$sql ="
SELECT DISTINCT
 topic.topic_id, 
 topic.title, 
 topic.type AS type, 
 topic.topic_last_post_id AS last_post_id, 
 topic_starter, reply.topic_id AS topic_id 
FROM reply, topic 
WHERE topic.cat='1' AND topic.topic_id=reply.topic_id 
ORDER BY topic.type DESC, topic.last_post_id DESC, reply.time DESC LIMIT 0, 30";

$query = mysql_query($sql);

?>


DISTINCT moet meteen na de SELECT in dit voorbeeld, zie Select SYNTAX

Edit2:
Ik weet niet of MySQL met dit over weg kan:
topic.topic_id

en dan ook nog deze

reply.topic_id AS topic_id
Ik zou die laatste weg laten, aangezien dat toch dezelfde is als topic.topic_id

[ Voor 50% gewijzigd door Verwijderd op 18-05-2003 11:09 . Reden: Even linkje erbij gezocht :) ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Argh, hij geeft nog altijd dezelfde resultaten weer!
Hoe kan dat?!

Acties:
  • 0 Henk 'm!

  • dArtagnan
  • Registratie: Mei 2002
  • Laatst online: 23-08 22:47

dArtagnan

Een voor allen, allen voor een

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php 

$sql =" 
SELECT 
topic.topic_id, 
topic.title, 
topic.type AS type, 
topic.topic_last_post_id AS last_post_id, 
topic_starter, reply.topic_id AS topic_id 
FROM topic 
LEFT JOIN reply
ON topic.topic_id=reply.topic_id 
WHERE topic.cat='1' 
ORDER BY topic.type DESC, topic.last_post_id DESC, reply.time DESC LIMIT 0, 30"; 

$query = mysql_query($sql); 

?> 

Acties:
  • 0 Henk 'm!

Verwijderd

Met distinct erbij laat hij alleen unieke resultaten zien, maar wanneer je bijvoorbeeld vier resulaten hebt met dezelfde titel maar waarbij 1 attribuut wel verschillend is dan zal je ze nog steeds 4 keer krijgen

Acties:
  • 0 Henk 'm!

  • Fatamorgana
  • Registratie: Augustus 2001
  • Laatst online: 21-07 01:24

Fatamorgana

Fietsen is gezond.

Misschien helpt het als je er een GROUP BY topic.title bij gooit?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
GROUP BY werkt goed, ik denk dat ik nu begrijp wat GROUP BY juist doet: het groepeerd bestaande resultaten met dezelfde waarden?

Acties:
  • 0 Henk 'm!

  • Fatamorgana
  • Registratie: Augustus 2001
  • Laatst online: 21-07 01:24

Fatamorgana

Fietsen is gezond.

Verwijderd schreef op 18 mei 2003 @ 11:38:
GROUP BY werkt goed, ik denk dat ik nu begrijp wat GROUP BY juist doet: het groepeerd bestaande resultaten met dezelfde waarden?
Yep, zo ben je dus van alle dubbele waarden af, en dat is precies wat je wilt.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nu zit ik met een gelijkaardig probleem:

hier allereerst de table structuren:

table cat :

CREATE TABLE cat (
id int(11) NOT NULL auto_increment,
cat_des varchar(255) NOT NULL default '',
PRIMARY KEY (id)
) TYPE=MyISAM;

table forum :

CREATE TABLE forum (
id int(11) NOT NULL auto_increment,
name varchar(255) NOT NULL default '',
des varchar(255) NOT NULL default '',
cat_id int(11) NOT NULL default '0',
topics int(11) NOT NULL default '0',
PRIMARY KEY (id)
) TYPE=MyISAM;


Ik wil dit krijgen:

cat1
forum 1
forum 2

cat2
forum 3

maar ik krijg:

cat 1
forum 1
cat 1
forum 2

cat 2
forum 3

Ik heb deze query:

PHP:
1
2
3
4
5
<?php

$sql = "SELECT c.*, f.* FROM cat c LEFT JOIN forum f ON f.cat_id = c.id GROUP BY c.id";

?>


Ik krijg niet het gewenste resultaat, via PHP kan ik het wel oplossen maar ik zou het graag in 1 query verkrijgen! Is dat mogelijK?

[ Voor 6% gewijzigd door Verwijderd op 18-05-2003 15:20 ]


Acties:
  • 0 Henk 'm!

Verwijderd

hier heb ik pas nog een oplossing voor gegeven :) zoiets zou moeten werken

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?

while( $row = mysql_fetch_assoc($result)
{
    if($row['catnaam'] != $cat)
    {
        $cat = $row['catnaam'];
        echo $cat;
    }

    echo $row['forumnaam'];

}

?>

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ja ok, dat wist ik ook wel hoe dat moest:
maar kan het niet via één query?

Acties:
  • 0 Henk 'm!

Verwijderd

dat doe je toch? een query waar vaker de cat voorkomt? je vangt de output steeds op?
ik denk niet dat het mogelijk is zonder de hulp van php om het in een query te stoppen, maar het bovenstaande voorbeeld moet gewoon werken met 1 query.

kijk ook ff naar [rml][ PHP/SQL] Forumindex query[/rml]

Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Volgens mij is het met SQL niet mogelijk dat binnen een query te doen.

Acties:
  • 0 Henk 'm!

Verwijderd

breezah, weet jij wel hoe de output van een query eruit ziet? het is net een exel sheet met op elke rij de zelfde type gegevens!!, het is dus niet mogelijk om eerst een rij die allen de categorie weergeeft en dan weer een of meer rij met forums, zo werkt het helaas niet, dus of meerdere querys of met php oplossen :)

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Zelf forumpje aan het bouwen? Ben ik ook mee bezig, en hierkom je niet onderuit. Of gewoon die extra categorie info voor lief nemen, en via PHP goed wegwerken, of meerdere queries gebruiken. Dus eerst alle categorieren queryen, en dan daarbij de goeie fora queryen, per categorie.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 15-09 18:24

dusty

Celebrate Life!

We gaan even vaag doen:

De TS moet geen distinct gebruiken voor zijn oplossing maar de juiste functie maximaal benutten.

[ Voor 3% gewijzigd door dusty op 19-05-2003 01:05 ]

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 15-09 18:24

dusty

Celebrate Life!

Verwijderd schreef op 18 mei 2003 @ 15:51:
Ja ok, dat wist ik ook wel hoe dat moest:
maar kan het niet via één query?
zoals olaf al zei: Nee.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

Verwijderd

oeps sry k :)

[ Voor 92% gewijzigd door Verwijderd op 19-05-2003 08:46 ]


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 19 May 2003 @ 08:33:
maar uhm wtf is ts? Testscenario ?
offtopic:
TopicStarter

Digitaal onderwijsmateriaal, leermateriaal voor hbo

Pagina: 1