Matthias Jütte: erster versuch eines joins - hilfe!

hallo zusammen!

ich bekomme folgende fehlermeldung:
+---+
SQL-query :

SELECT geschaeft.* FROM geschaeft INNER JOIN oezeiten ON geschaeft.id=oezeiten.geschaeft WHERE (oezeiten.tag='1' AND LIMIT 0, 30

MySQL said:
You have an error in your SQL syntax near 'LIMIT 0, 30' at line 1
+---+

der komplette query-string heißt:
+---+
SELECT geschaeft.* FROM geschaeft INNER JOIN oezeiten ON geschaeft.id=oezeiten.geschaeft WHERE (oezeiten.tag='1' AND oezeiten.von<='8:00'))
+---+

hier noch das dump-schema der beiden tabellen:
+---+

Table structure for table geschaeft

CREATE TABLE geschaeft (
  id smallint(4) unsigned NOT NULL auto_increment,
  name varchar(255) NOT NULL default '',
  inh varchar(255) default NULL,
  str varchar(255) NOT NULL default '',
  hnr varchar(10) NOT NULL default '',
  zusatz varchar(255) default NULL,
  plz varchar(5) NOT NULL default '',
  ort varchar(255) NOT NULL default '',
  lage tinyint(3) unsigned NOT NULL default '0',
  vorw varchar(6) default NULL,
  tel varchar(100) default NULL,
  email varchar(255) default NULL,
  url varchar(255) default NULL,
  branche smallint(4) unsigned NOT NULL default '0',
  bild varchar(255) default NULL,
  info text,
  angebot text,
  PRIMARY KEY  (id),
  FULLTEXT KEY angebot (angebot),
  FULLTEXT KEY info (info)
) TYPE=MyISAM;

--------------------------------------------------------

Table structure for table oezeiten

CREATE TABLE oezeiten (
  id smallint(4) unsigned NOT NULL auto_increment,
  geschaeft smallint(4) unsigned NOT NULL default '0',
  tag set('1','2','3','4','5','6','7') NOT NULL default '',
  von time NOT NULL default '00:00:00',
  bis time NOT NULL default '00:00:00',
  PRIMARY KEY  (id)
) TYPE=MyISAM;
+---+

der string ist dazu bestimmt, alle daten von allen geschäften aus der tabelle geschaefte, die am montag ab 9 uhr geöffnet haben, auszulesen.

was mache ich falsch?

tia,

Matthias

  1. Hallo,

    ich bekomme folgende fehlermeldung:
    +---+
    SQL-query : 
    SELECT geschaeft.* FROM geschaeft INNER JOIN oezeiten ON geschaeft.id=oezeiten.geschaeft WHERE (oezeiten.tag='1' AND LIMIT 0, 30
    MySQL said:
    You have an error in your SQL syntax near 'LIMIT 0, 30' at line 1
    +---+

    Ja, da hat MySQL doch auch Recht. LIMIT 0 ist keine Bedingung, die in einer WHERE-Klausel stehen kann. Nach dem AND hat etwas zu stehen, was entweder TRUE oder FALSE ergibt.

    der komplette query-string heißt:
    +---+
    SELECT geschaeft.* FROM geschaeft INNER JOIN oezeiten ON geschaeft.id=oezeiten.geschaeft WHERE (oezeiten.tag='1' AND oezeiten.von<='8:00')

    Das ist aber ganz was Anderes als oben. Hier sehe ich keinen Syntaxfehler.

    Welcher Zusammenhang besteht zwischen den beiden SELECT-Statements?

    viele Grüße

    Axel

    1. +---+
      Ja, da hat MySQL doch auch Recht. LIMIT 0 ist keine Bedingung, die in einer WHERE-Klausel stehen kann. Nach dem AND hat etwas zu stehen, was entweder TRUE oder FALSE ergibt.

      Welcher Zusammenhang besteht zwischen den beiden SELECT-Statements?

      gerade diesen nicht vorhandenen zusammenhang vermute ich als das problem. den zweiten string schicke ich als query an die db (du sagst er sei korrekt), der erste erscheint als fehlerhaft in der fehlermeldung der db.

      daraus schließe ich, daß die datenbank meine string umformt. allerdings weiß ich auch nicht, was die limit option bedeutet. daher fällt es mir schwer das ganze zu interpretieren.

      (und ja, habe schon in der mysql-doku nachgesehen, werde daraus aber nicht schlau)

      1. Hallo,

        gerade diesen nicht vorhandenen zusammenhang vermute ich als das problem. den zweiten string schicke ich als query an die db (du sagst er sei korrekt), der erste erscheint als fehlerhaft in der fehlermeldung der db.

        Welches SELECT schickst Du an die Datenbank?
        dieses:
        SELECT geschaeft.* FROM geschaeft INNER JOIN oezeiten ON geschaeft.id=oezeiten.geschaeft WHERE (oezeiten.tag='1' AND oezeiten.von<='8:00'))
        oder dieses:
        SELECT geschaeft.* FROM geschaeft INNER JOIN oezeiten ON geschaeft.id=oezeiten.geschaeft WHERE (oezeiten.tag='1' AND oezeiten.von<='8:00')

        *Genau* hinsehen!

        Wie MySQL da _von alleine_ ein LIMIT reinbastelt, weiß ich auch nicht.

        viele Grüße

        Axel

        1. *Genau* hinsehen!

          guter tip - die klammer war mir bisher nicht aufgefallen *blush*

          danke für die hilfe!

  2. Hi,

    SELECT geschaeft.* FROM geschaeft INNER JOIN oezeiten ON geschaeft.id=oezeiten.geschaeft WHERE (oezeiten.tag='1' AND LIMIT 0, 30

    "(oezeiten.tag='1' AND" ist keine gültige WHERE-Klausel.

    SELECT geschaeft.* FROM geschaeft INNER JOIN oezeiten ON geschaeft.id=oezeiten.geschaeft WHERE (oezeiten.tag='1' AND oezeiten.von<='8:00'))

    Ebensowenig wie "(oezeiten.tag='1' AND oezeiten.von<='8:00'))". Scharfes Hinblicken sollte eigentlich genügen.

    hier noch das dump-schema der beiden tabellen:

    Weder die Tabellenstruktur noch der Join stellen hier ein Problem dar.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes