kostenloser Webspace werbefrei: lima-city


Zwei unterschiedliche MySQL-Tabellen durchsuchen.

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    fabian-riedel

    Kostenloser Webspace von fabian-riedel

    fabian-riedel hat kostenlosen Webspace.

    Hallo,
    Ich arbeite gerade an einer Suchfunktion, die meine Blog-Datenbanktabelle und meine Video-Datenbanktabelle nach einem Suchbegriff durchsucht.
    Meine Abfrage sieht bis jetzt noch so aus, funktioniert allerdings noch nicht:
    ('SELECT * FROM video WHERE tags LIKE '%$suchbegriff%' OR text LIKE '%$suchbegriff%' OR category LIKE '%$suchbegriff%') AND (SELECT * FROM blog WHERE tags LIKE '%$suchbegriff%' OR text LIKE '%$suchbegriff%' OR category LIKE '%$suchbegriff%') ORDER BY date DESC


    Kann mir jemand sagen was an dieser Abfrage noch falsch ist?
    Gruß Fabi

    Beitrag zuletzt geändert: 11.9.2011 13:31:56 von fabian-riedel
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Du darfst keine zwei Selects hintereinander schreiben, sondern musst
    FROM tabelle1, tabelle2
    schreiben. Als Spaltenname verwendest du dann im SQL-Code z.B.
    tabelle1.spaltenname
    . Generell solltest du dich aber in die Verwendung mehrerer Tabellen einlesen, damit du das auch verstehst.
  4. Autor dieses Themas

    fabian-riedel

    Kostenloser Webspace von fabian-riedel

    fabian-riedel hat kostenlosen Webspace.

    Sieht dann so aus:
    SELECT * FROM video, blog WHERE video.tags LIKE '%$suchbegriff%' OR video.text LIKE '%$suchbegriff%' OR video.category OR blog.tags LIKE '%$suchbegriff%' OR blog.text LIKE '%$suchbegriff%' OR blog.category LIKE '%$suchbegriff%' ORDER BY date DESC


    Tut leider immer noch nicht :slant:

    Gruß Fabi
  5. fabian-riedel schrieb:
    Sieht dann so aus:
    SELECT * FROM video, blog WHERE video.tags LIKE '%$suchbegriff%' OR video.text LIKE '%$suchbegriff%' OR video.category OR blog.tags LIKE '%$suchbegriff%' OR blog.text LIKE '%$suchbegriff%' OR blog.category LIKE '%$suchbegriff%' ORDER BY date DESC


    Tut leider immer noch nicht :slant:

    Gruß Fabi


    Kannst du vielleicht einmal einen Screen von deiner Datenbank posten und hast du im originalcode die Klammern gesetzt?
  6. Hm, wäre schön, wenn du den Code ein wenig übersichtlicher hier posten könntest. Wenn du den so schreibst, dann ist es kein Wunder, dass sich irgendwelche Fehler beim tippen einschleichen.

    Ich meine an einer Stelle hast du das LIKE '$suchbegriff%' vergessen... aber wie gesagt, wenn du es übersichtlicher aufschreibst, dann wäre ich mir da jetzt sicherer:-P
  7. Hallo fabian-riedel,

    was Du brauch ist eine Union-Abfrage.
    (SELECT * FROM video WHERE tags LIKE '%$suchbegriff%' OR text LIKE '%$suchbegriff%' OR category LIKE '%$suchbegriff%')
    UNION
    (SELECT * FROM blog WHERE tags LIKE '%$suchbegriff%' OR text LIKE '%$suchbegriff%' OR category LIKE '%$suchbegriff%') 
    ORDER BY date DESC;
    Das setzt aber voraus, dass in beiden Tabellen gleich viele Felder mit gleichen Datentypen an gleicher Position sind. Falls dem nicht so ist, dann musst Du anstelle von 'SELECT *' die Feldnamen explizit angeben. Also z.B.
    SELECT tags, text, category FROM ...

  8. Autor dieses Themas

    fabian-riedel

    Kostenloser Webspace von fabian-riedel

    fabian-riedel hat kostenlosen Webspace.

    Ist das Übersichtlicher?
    SELECT 
    	tags, 
    	text, 
    	category 
       FROM 
    	video, 
    	blog 
       WHERE 
    	video.tags LIKE '%$suchbegriff%' 
       OR 
    	video.text LIKE '%$suchbegriff%' 
       OR 
    	video.category LIKE '%$suchbegriff%' 
       OR 
    	blog.tags LIKE '%$suchbegriff%' 
       OR 
    	blog.text LIKE '%$suchbegriff%' 
       OR 
    	blog.category LIKE '%$suchbegriff%' 
       ORDER BY 
    	date 
       DESC


    Sieht jetzt so aus, funktioniert allerdings immernoch nicht und sie Union-Abfrage geht nicht, da es sehr unterschiedliche Tabellen sind.
    Noch jemand ne Lösungsidee?

    Gruß Fabi
  9. Sollten die Spaltennamen wirklich identisch sein, dann lösche die Tabellenbezeichnung. Sollte das nicht so sein, dann musst du im SELECT-Teil erst Bezeichnungen für die Spateln festlegen.
  10. Hallo fabian-riedel,

    wenn Du nur die Felder tags, text und category benötigst und es sich dabei um Text/Varchar-Felder oder ähnliches handelt, dann sollte folgendes doch eigentlich funktionieren:
    (    SELECT tags, text, category, date
         FROM video 
         WHERE tags LIKE '%$suchbegriff%' OR text LIKE '%$suchbegriff%' OR category LIKE '%$suchbegriff%')
    UNION
    (    SELECT tags, text, category, date
         FROM blog
         WHERE tags LIKE '%$suchbegriff%' OR text LIKE '%$suchbegriff%' OR category LIKE '%$suchbegriff%') 
    ORDER BY date DESC;
    Damit Dein zuletzt geposteter Code was vernünftiges macht müsste er eigentlich folgendermaßen aussehen:
    SELECT video.tags AS v_tags, video.text AS v_text, video.category AS v_category
        blog.tags AS b_tags, blog.text AS b_text, blog.category AS b_category
    FROM video, blog 
    WHERE video.tags LIKE '%$suchbegriff%' OR video.text LIKE '%$suchbegriff%' 
        OR video.category LIKE '%$suchbegriff%' 
        OR blog.tags LIKE '%$suchbegriff%' OR blog.text LIKE '%$suchbegriff%' 
        OR blog.category LIKE '%$suchbegriff%' 
    ORDER BY video.date, blog.date DESC;
    Wobei das wahrscheinlich nicht machen wird, was Du willst und einfach zwei Tabellen ohne weiter JOIN-Bedingungen in den FROM-Abschnitt zu schreiben ist unter umständen ein ziemlich schlechte Idee, da das auf manche Systemen zu einer laufzeittechnische Katastrophe führt.
    Im Zweifel bleibt Dir dann nur die beiden Abfragen getrennt auszuführen und sie dann explizit zu mergen, d.h. z.B. mit PHP.

    Beitrag zuletzt geändert: 12.9.2011 20:20:11 von darkpandemic
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!