[SQL] query wil niet werken :(

Pagina: 1
Acties:
  • 18 views sinds 30-01-2008

Anoniem: 59546

Topicstarter
$query = "SELECT id,date,title,replies FROM tutorial,review order by date DESC LIMIT 3";

Geeft geen resultaat... als ik alleen tutorial of alleen review doe krijg ik wel resultaat. Wat doe ik fout? Data moet dus uit allebei de tabelen komen...

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:22
Je selecteert uit 2 tabellen maar je legt op geen enkele manier een relatie tussen die 2 tabellen. Het DBMS weet dus begot niet hoe hij die tables moet linken. Normaal gezien moet je echter wel een resultaat krijgen, nl. een cartesiaans product. (Voor ieder record uit de tabel tutorial, krijg je ieder record uit de tabel review terug).
Je moet dus je tabellen linken.

Het kan natuurlijk zijn dat, als je dat gedaan hebt, dat je nog geen records terugkrijgt. Dan zal dat waarschijlijk zijn omdat de tabel Review leeg is. (Vandaar dat je ook geen cartesiaans product krijg).
Als je toch alle 'tutorials' wil zien, zelfs al hebben die geen 'review', zul je een outer join moeten gebruiken.

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:22

https://fgheysels.github.io/


Anoniem: 59546

Topicstarter
outerjoin wordt daar niet uitgelegd.. alleen inner, left en right.

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:22
Anoniem: 59546 schreef op 11 september 2002 @ 19:20:
[...]
outerjoin wordt daar niet uitgelegd.. alleen inner, left en right.


Ik heb die tutorial ook niet zelf gelezen, ik had hem enkel maar gepost omdat ik dacht dat je dat wel kon gebruiken om wat basic SQL kennis op te doen.

Ik geloof dat een Right join hetzelfde is als een outer join, maar anders google je gewoon ff op 'OUTER JOIN'.

https://fgheysels.github.io/


  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 25-04 10:44
Left en right joins zijn gewoon outer joins inderdaad.

Anoniem: 59546

Topicstarter
$query = "SELECT DISTINCT t.id, t.date, t.title, t.replies, r.id, r.date, r.title, r.replies
FROM tutorial t,review r
GROUP BY t.title, r.title
ORDER BY t.date, r.date DESC LIMIT 9";

dat zou moeten werken :S maar ik krijg nu 9x de zelfde titel van review...

Anoniem: 16659

omdat er nogsteeds geen relatie hebt aangegeven tussen review en tutorial


bijv: where r.tutorial_id = t.id
ofzoiets

simpeler gezegd:
hoe weet die database welke tutorial bij welke review hoort?

edit: namen verkeerd gelezen :)

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:22
Lees toch nog maar eens die tutorial door die ik gepost had, en in't bijzonder de sectie over joins.
Ik zie nergens waar je een join legt.

https://fgheysels.github.io/


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 03-02 23:18

D2k

levert dit geen mysql_error() op?

Doet iets met Cloud (MS/IBM)


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:22
D2k schreef op 11 september 2002 @ 21:12:
levert dit geen mysql_error() op?


Neen, gewoon een cartesians product.

https://fgheysels.github.io/


Anoniem: 59546

Topicstarter
D2k schreef op 11 september 2002 @ 21:12:
levert dit geen mysql_error() op?
Nope

Anoniem: 59546

Topicstarter
whoami schreef op 11 september 2002 @ 21:09:
Lees toch nog maar eens die tutorial door die ik gepost had, en in't bijzonder de sectie over joins.
Ik zie nergens waar je een join legt.
Ik kom er niet uit hoe die joins werken :S zou jij ajb de query in elkaar kunnen zetten?

Anoniem: 16659

D2k schreef op 11 september 2002 @ 21:12:
levert dit geen mysql_error() op?
nee want de database geeft precies terug wat je wilt hebben
SELECT DISTINCT t.id, t.date, t.title, t.replies, r.id, r.date, r.title, r.replies
FROM tutorial t,review r
GROUP BY t.title, r.title
ORDER BY t.date, r.date DESC LIMIT 9
in "normaal nederlands" staat er:
GEEF MIJ ALLE UNIEKE REGELS DIE BESTAAN UIT:
t.id, t.date, t.title, t.replies, r.id, r.date, r.title, r.replies
UIT DE TABELLEN:
tutorial t,review r
GROEPEER DAT OP
t.title, r.title
ZET DAT OP DE VOLGORDE VAN:
t.date oplopend, r.date aflopend
HOEVEEL JE OOK TERUGKRIJG BEPERK HET TOT 9 RIJEN

=>

De database weet niet hoe die de relatie moet leggen dus hij geeft je gewoon de mogelijke combinaties.

Anoniem: 16659

bijv zoiets (maar ligt aan je datamodel):

edit: ff goed naar gekeken en ik denk dat de kolom title de relatie legt tussen een TUT en een REV ? (waarschijnlijk verstandig om nog eens naar je datamodel te kijken dan.) Maar in dat geval moet het zo:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT 
            t.id, 
            t.date, 
            t.title, 
            t.replies, 
            r.id, 
            r.date, 
            r.title, 
            r.replies 
FROM 
            tutorial t,
            review r 
WHERE 
            t.title = r.title
ORDER BY 
            r.date DESC

Anoniem: 59546

Topicstarter
Bedankt voor de uitleg, maar je code werkt niet. Me database model zit wel goed in elkaar denk ik.
2 tabellen review en tutorial
in elke tabel de collomen id,date,title,replies

Anoniem: 16659

ja maar waar staat die ID DATE TITLE REPLIES voor?
is dat in de ene tabel een tutorialID en in de andere een reviewID, etc?

zo'n tutorial hoort dus bij een review (of andersom) dat is de relatie die die 2 tabllen met elkaar hebben.

Als je selecteert moet je die koppeling (relatie) aangeven.
de ene sleutel koppelen aan dezelfde sleutel in de andere tabel.

lees eens documentatie over normaliseren/relationele databases

Anoniem: 59546

Topicstarter
Anoniem: 16659 schreef op 11 september 2002 @ 21:52:
ja maar waar staat die ID DATE TITLE REPLIES voor?
is dat in de ene tabel een tutorialID en in de andere een reviewID, etc?
Nog al logisch niet.. ID uniek id nr
titel = naam van tutorial of van review
date = date van tutorial of van review
replies = aantal replies die erop gegeven zijn.

die zooi staat in apparte tabel 1 tutorials 1 review. Lijkt me niets mis mee...

  • corani
  • Registratie: December 2000
  • Laatst online: 05-10-2017

corani

__,,,_(^_^)_,,,__

Waarom zou je in hemelsnaam willen opslaan hoeveel reply's er gegeven zijn? Als je dat wilt weten doe je een SELECT COUNT ofzo

Laat me nou toch eens met rust man!
Iedereen die in telekinese gelooft, steek a.u.b. mijn hand op


Anoniem: 59546

Topicstarter
maakt jou dat nou uit joh! daar gaat dit topic niet over! verder is het enorm dom om select count te doen als je een tering grote db hebt!

  • corani
  • Registratie: December 2000
  • Laatst online: 05-10-2017

corani

__,,,_(^_^)_,,,__

kun je ff de output van
code:
1
describe tutorial;

en
code:
1
describe review;

geven, zodat wij ook een beetje weten hoe je datastructuur in elkaar zit?

Laat me nou toch eens met rust man!
Iedereen die in telekinese gelooft, steek a.u.b. mijn hand op


Anoniem: 59546

Topicstarter
#
# Tabel structuur voor tabel `review`
#

CREATE TABLE review (
id int(11) NOT NULL auto_increment,
title varchar(50) NOT NULL default '',
intro text NOT NULL,
name varchar(100) NOT NULL default '',
date bigint(12) NOT NULL default '0',
last_reply bigint(12) NOT NULL default '0',
replies int(5) NOT NULL default '0',
aantal int(4) NOT NULL default '0',
PRIMARY KEY (id),
KEY id_2 (id)
) TYPE=MyISAM;
# --------------------------------------------------------

#
# Tabel structuur voor tabel `tutorial`
#

CREATE TABLE tutorial (
id int(11) NOT NULL auto_increment,
title varchar(50) NOT NULL default '',
intro text NOT NULL,
name varchar(100) NOT NULL default '',
date bigint(12) NOT NULL default '0',
last_reply bigint(12) NOT NULL default '0',
aantal int(4) NOT NULL default '0',
replies int(5) NOT NULL default '0',
views int(11) NOT NULL default '0',
PRIMARY KEY (id),
KEY id_2 (id)
) TYPE=MyISAM;
Je hoeft alleen id,date,titel,replies uit elke op te halen.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12:19

Janoz

Moderator Devschuur®

!litemod

Anoniem: 59546 schreef op 12 september 2002 @ 21:50:
maakt jou dat nou uit joh! daar gaat dit topic niet over! verder is het enorm dom om select count te doen als je een tering grote db hebt!



Goed, als je werkelijk niet geholpen wilt worden vind ik het best. Daarnaast ben ik van mening dat jij nog niet in de positie zit om aan te geven wat wel of niet 'dom' is op het gebied van databases.

Lees de tutorials en ga eens wat doorlezen over databases voordat je d'r allemaal dingen mee probeert te doen. Om gegevens op te vragen moeten er relaties tussen die gegevens zitten. Die relaties moet je ook op 1 of andere manier aan de database doorgeven. Ik heb een sterk vermoeden dat er tussen deze twee tabellen niet eens een relatie bestaat, laat staan dat je er zelf een op kunt geven.

Daarnaast is dit forum niet bedoeld om de mensen voor je aan het werk te laten zetten. Tuurlijk kun je vragen om hulp, maar we gaan hier niet een kant en klare query voor je bakken die je zo in je programma kunt plakken. Succes met het doornemen van de tutorials.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1

Dit topic is gesloten.