Toon posts:

[sql] Probleem bij query, dubbele ON bij JOIN

Pagina: 1
Acties:

Verwijderd

Topicstarter
Bij het maken van een zo snel mogelijke query ben ik op een probleempje gestuit. Ik heb de volgende tabellen:

Banner
id (int)
datum (bigint)
views (int)
kliks (int)
niet_uniek (int)
siteid (int)

Campagne
id (int)
banner (tinytext)
url (tinytext)
daily_limit (int)
actief (char)

Nu wil ik een id plukken uit de tabel campagne die als eisen heeft:
- actief = 'ja'
- views van vandaag zijn lager dan daily_limit

Dat houdt dus in dat ik de tabel Banner moet joinen bij Campagne, nu is dat geen probleem maar hij moet volgens mij een dubbel ON statement aanwenden om zowel op siteid te joinen als op datum.

Ik heb de volgende query gebouwd:
code:
1
2
3
4
$sql="SELECT c.id FROM campagne c 
RIGHT JOIN banner AS b 
ON b.siteid = c.id AND b.datum = '$datum' 
WHERE c.actief = 'ja' AND b.views < c.daily_limit";

Deze query geeft geen errors, maar hij vindt dat geen enkel resultaat voldoet aan de eisen die in die opsomming beschreven staat.

Wat is fout aan mijn query? Hoe kan wat ik wil wel?

  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01-2025
waarom zet je die datum niet gewoon in je where clausule?

Verwijderd

Topicstarter
Ik zal het es proberen.

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

probeer eens een left join, je statement is an sich wel goed.

Klaar voor een nieuwe uitdaging.


Verwijderd

Topicstarter
Op zaterdag 16 februari 2002 13:45 schreef chem het volgende:
probeer eens een left join, je statement is an sich wel goed.
Ik heb dit geprobeerd, maar het leverde geen ander resultaat op. Ik had trouwens bewust voor de RIGHT JOIN gekozen, aangezien op een nieuwe dag het voorkomt dat er nog geen rij is voor die siteid in de tabel Banner en dan zou met een LEFT JOIN een error komen, want die doet het pas wanneer beide ook echt bestaan. (Correct me if i'm wrong!)

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

you're wrong :)

dan heb je het over een INNER join. Met een left (of right) join hou je simpelweg kolommen met de waarde NULL over...

Een waarschuwing of foutmelding levert het je iig niet op :)

Klaar voor een nieuwe uitdaging.


Verwijderd

Topicstarter
En als ik me niet vergis ondersteund MySQL geen INNER JOIN?

Wat was dan ook al weer het verschil tussen RIGHT en LEFT?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-09 21:31

Janoz

Moderator Devschuur®

!litemod

Op zaterdag 16 februari 2002 13:15 schreef dannydude het volgende:
.......
datum (bigint)
....
Hmm .. volgens mij heeft SQL ook wel beter hierbij passende types...

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


Verwijderd

Topicstarter
Op zaterdag 16 februari 2002 14:33 schreef Janoz het volgende:

[..]

Hmm .. volgens mij heeft SQL ook wel beter hierbij passende types...
Jah, maar ik sla datum op in formaat ddmmyyyy, dus niet als timestamp.

Verwijderd

Topicstarter
Op zaterdag 16 februari 2002 13:33 schreef brammetje het volgende:
waarom zet je die datum niet gewoon in je where clausule?
Met deze query
code:
1
2
3
4
$sql="SELECT c.id FROM campagne c 
RIGHT JOIN banner AS b 
ON b.siteid = c.id 
WHERE c.actief = 'ja' AND b.views < c.daily_limit AND b.datum = '$datum'";

Kan ie net zo min enig resultaat vinden...

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-09 21:31

Janoz

Moderator Devschuur®

!litemod

Op zaterdag 16 februari 2002 14:35 schreef dannydude het volgende:

[..]

Jah, maar ik sla datum op in formaat ddmmyyyy, dus niet als timestamp.
timestamp(8) :X

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


Verwijderd

Topicstarter
Op zaterdag 16 februari 2002 14:37 schreef Janoz het volgende:

[..]

timestamp(8) :X
I know, maar als je een dag op wil slaan moet je vervolgens bij je select een range maken, of op een standaard tijdstip van de dag richten. Dus heeft bij mij imho zowat geen voordeel, alleen nadeel...

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

Op zaterdag 16 februari 2002 14:39 schreef dannydude het volgende:

[..]

I know, maar als je een dag op wil slaan moet je vervolgens bij je select een range maken, of op een standaard tijdstip van de dag richten. Dus heeft bij mij imho zowat geen voordeel, alleen nadeel...
of date()

lees de mysql manual bij 'column types' nog maar eens :)

laat eens zien met echo $query wat er ECHT naar de server gaat?

Klaar voor een nieuwe uitdaging.


Verwijderd

Topicstarter
Op zaterdag 16 februari 2002 14:41 schreef chem het volgende:

[..]

of date()

lees de mysql manual bij 'column types' nog maar eens :)

laat eens zien met echo $query wat er ECHT naar de server gaat?
Echo $query of echo $sql?

Verwijderd

Topicstarter
Op zaterdag 16 februari 2002 14:41 schreef chem het volgende:

[..]

of date()

lees de mysql manual bij 'column types' nog maar eens :)

laat eens zien met echo $query wat er ECHT naar de server gaat?
Oh, godheid, sla mij met uwer knuppel en toon geen meelij :) Ik had bij deze code
code:
1
2
 $nu=time();
$datum=date("dmY", $nu);

de regel
code:
1
$nu=time();

vergeten :) Terwijl ik me ineens bedenk dat wanneer je het tweede argument weg laat bij date() de parsser er automatisch de huidige datum aan geeft |:(

Forgive, for i am one stupid guy :)
Pagina: 1