Frage wegen MySQL-Abfrage

G

gma

Aktives Mitglied
Thread Starter
Dabei seit
18.02.2007
Beiträge
119
Reaktionspunkte
2
Hallo,

ich probiere jetzt seit Stunden herum, verstehe aber offensichtlich reguläre Ausdrücke in MySQL garnicht.

ich habe zwei Tabellen, jeweils mit einer ID

Tabelle 1
ID
1001xyz
1002xyz
1003xyz

wobei xyz irgendwelche Zahlen sind

Tabelle 2
ID
1001
1002
1003

Ich möchte die Spalten aus Tabelle 1 haben, deren ID die IDs aus Tabelle 2 beinhaltet (also gleich sind bis auf die letzten 3 Ziffern)!

Wie muss ich abfragen?

gma
 
Zauberwort "LIKE", ist aber Pfusch und wenig performant.
 
Wenn ich Dein Anliegen richtig verstehe, brauchst hier REGEXP gar nicht...
Das müsste z.B. so gehen:

Code:
<?php
$tab2_id = 1001;
$sql = "SELECT * FROM tabelle_1 WHERE id LIKE '$tab2_id%'";

Beachte das Prozentzeichen am Ende des Queries! Das ist der »Platzhalter«, der »keins oder beliebig viele Zeichen« bedeutet. Dieser Query würde z.B. folgende IDs finden:
- 1001,
- 1001xyz,
- 1001999,
- 1001321
- usw.

Hoffe, das hilft Dir weiter…
 
Oh, das hab ich zu langsam getippt… :-/


Zauberwort "LIKE", ist aber Pfusch und wenig performant.

Stimmt natürlich; LIKE ist nicht gerade schnell… aber ist REGEXP schneller?
(Ernstgemeinte Frage; ich hab’s nie ausprobiert.)
 
Eine sauber definierte Tabelle, bei der die gesuchten Informationen in zwei "normalen" Spalten stehen nebst einem Index, das wäre die Lösung.
Solch ein Gefrickel mit LIKE geht wunderbar bei 50 Teste-Datensätzen und wenn so etwas dann live geht, knirscht es irgendwann. Man sollte es gleich richtig machen.
 
Und noch einen habe ich, aber auch da weiß zugegebenermaßen nicht, wie es sich mit der Performance verhält:

Code:
$len = strlen($tab2_id);
$sql = "SELECT * FROM tabelle_1 WHERE LEFT(id, $len) = '$tab2_id'";
 
Super, vielen Dank!

Muss ich alles mal testen, performance ist sicher ein Argument, da jede Tabelle 30-40 Spalten und 150000 Zeilen hat.

Wahrscheinlich ist es wohl am effektivsten, tatsächlich die ID in Tabelle1 per PerlSkript (mehr kann ich nicht) um xyz zu kürzen und mit xyz eine neue Spalte aufzumachen.

Auf jeden Fall vielen Dank

gma
 
Mit „größer gleich“ oder „zwischen folgenden Zahlen“ kannst Du nicht arbeiten?

Das kommt auf die Verteilung der IDs an, aber denkbar ist ja soetwas wie

Code:
WHERE tab2.id >= tab1.id *1000 AND tab2.id < (tab1.id + 1) *1000

Das ist dann auch chön chnell.
 
Interaktive Datenbank - wie denn?

Ähm tschuldigung - Eintrag versaubeutelt - wollte eigentlich Thema starten...
:rolleyes:
 
Zurück
Oben Unten