Ilja: Mysql-Select Frage...

Beitrag lesen

yo,

grundsätzlich ist es immer hilfreich zu wissen, welche version du zu welchem dbms benutzt. gerade bei der verwendung von mysql gibt es dort sehr grosse unterscheide in den jeweiligen versionen. und wenn es um zwei tabellen geht, ist es auch immer schön, den aufbau beider tabellen zu kennen und nicht nur der einen.

ZB eine Tabelle in der 2000 Keywords sind. Diese ist referenziert zu einer zweiten Datenbank.

du meinst sie referenziert zu einer anderen tabelle und nicht datenbank ?

Jetzt brauche ich aber ein select welches, wenn kein Datensatz in der zweiten Tabelle besteht trotzdem einen Datensatz zurückgibt.

das ist eben über den OUTER JOIN leicht möglich, aber du willst ja nicht nur einen zurück bekommen, sondern immer gleich 10 datensätze pro keyword. und da muss man dann tricksen. der trick funktioniert aber auch nur, weil du die feste anzahl an datensätze kennst.

Wie gesagt die zweite Tabelle kann bis zu 24000 Datensätze beinhalten, tut sie aber im moment nicht. Sie wird langsam größer werden. Trotzdem brauche ich ein Select welches sie alle zurückgibt... Also auch die die bereits in tab2 sein werden...

eigentlich riecht das ein wenig nach einem designfehler, eine datenbank kann nicht das hergeben, was nicht vorhanden ist. wenn du diese werte von anfang an benötigst, dann sollten sie auch von anfang an vorhanden sein. aber ohne deine genaue umgebung zu kennen, kann man das auch nicht gut beurteilen.

wie auch immer, der UNION ist schon ein gehbarer weg, auch das mit den unterschiedlichen menüpunkten 0-9 läßt sich aus einer abfrage heraus kitzeln. dafür kann man variablen benutzen, die sich bei jedem datensatz der abfrage immer um +1 erhöhen und sich beim wert 10 wieder auf 0 initialisieren. mysql bietet variablen an, kombiniert mit einem CASE oder IF konstrukt, das nach den wert 10 prüft kannst du auch verwenden.

eine zweite möglichkeit besteht darin, eine hilfstabelle anzulegen, die nur 10 datensätze mit den werten 0 bis 9 beinhaltet. damit kannst du dann das kreuzprodukt von der tabelle der stichwörter mit dieser hilfstabelle bilden. ich finde diesen weg eleganter, da ich keinen endlosen langen UNION bilden muss und ich sogar leicht die anzahl der menüpunkte damit steuern kann falls es mehr oder weniger als 10 menüwerte gibt, ohne die abfrage anpassen zu müssen, sondern nur über die datensätze der hilfstabelle steuer.

aber eine frage bleibt noch offen. ich vermute, die zweite tabelle füllt sich über die zeit stück für stück mit datensätze und nicht alle auf einmal. dann brauchst du noch einen mechanismuss, der genau das berücksichtigt, dass du immer 24.000 Datensätze zurück bekommst. auch dafür gibt es eine lösung in kombination von CASE und DISTINCT. aber da es nur eine vermutung ist, würde ich gerne erst einmal deine rückmeldung abwarten mit hoffentlich der information deiner version des servers (nicht client) und den genauen tabellen-layout beider tabellen.

frohe Ostern
Ilja