2017-01-26 2 views
0

Ich bin auf der Suche nach einer Möglichkeit, ein Feld in einer Datenbank als Abfrage zu verwenden. Das ist, was ich habe:Datenbankfeld zu MySQL Query

Spalte Titel: banemail

Der Inhalt dieses Feldes wird aktualisiert mit der vBulletin-Einstellungen Seite. Es speichert die E-Mail-Adressen, die ich bei der Registrierung sperren möchte. Ich brauche eine Abfrage, die alle Benutzer löscht, die bereits registriert sind und eine gesperrte E-Mail verwenden. Ich möchte den Inhalt aus der Tabelle abrufen und dann eine eigene Abfrage verwenden.

Abfrage so weit:

$datastoreemails = $vbulletin->db->query_read("SELECT data FROM ".TABLE_PREFIX."datastore WHERE title = 'banemail'"); 

while($content = $vbulletin->db->fetch_array($datastoreemails)) 
    { 
echo $content['data']."<br />"; 
    } 

Dieser Ausgang ist:

.cc .co hotmail

Wie kann ich diese Ausgabe in eine Abfrage dann drehen jemand in der Datenbank zu löschen, die eine E-Mail-Adresse hat containg obenstehendes?

Dies funktioniert, wenn ich es manuell ausführen, aber ich habe 20-30 E-Mail-Adresse verboten und ich würde alles in 1 Abfrage tun, wenn möglich.

DELETE FROM TABLE_PREFIX_user WHERE email LIKE '%.com%'; 

TIA

+0

Sind '.cc',' .co' und 'hotmail' als drei separate Tokens zu betrachten, für die die E-Mail-Datensätze gelöscht werden sollen? –

+0

Entschuldigung, ja. Gesperrte E-Mails werden auf der Einstellungsseite durch ein Leerzeichen getrennt eingegeben. Ich würde die E-Mails so eingeben: hotmail.com hotmail.co.uk gmail.com – John

Antwort

0

konnte ich noch nie haben unter der Annahme, benutzen d vbulletin, so müssen Sie möglicherweise die unten anpassen. Ich wusste nicht, was die Benutzer-Tabelle für Beispiele war, also habe ich gerade "Benutzer" eingegeben.

Aus Ihrem Code sieht es so aus, als gäbe es ein einzelnes Textfeld, in dem die gesperrten E-Mail-Adressen in Ihrer Datenbank gespeichert werden. Wenn dies der Fall ist, möchten Sie vielleicht "query_first" wie dieses $ vbulletin-> db-> query_first ($ query) verwenden, da dies nur eine Zeile herauszieht und Sie die Ergebnisse nicht durchlaufen müssen. Ich habe den obigen Code für den Fall geschrieben, dass es mehrere Zeilen mit gesperrten E-Mails gibt, die funktionieren sollten, auch wenn es nur einen gibt.

+0

Vielen Dank. Ja, Sie haben Recht, der Inhalt ist nur in einem Textfeld gespeichert. Ich werde dich wissen lassen, wie ich damit auskomme. – John

+0

Das Echo gibt genau das aus, was ich möchte, aber die Abfrage wird nicht von SQL ausgeführt. Ich habe es sogar direkt in phpmyadmin ausprobiert und das habe ich bekommen. '0 Zeilen betroffen. (Abfrage dauerte 0.0015 Sekunden.) DELETE FROM tf_user WHERE E-Mail wie '% i.com%' UND E-Mail wie '% Hallo%' ' – John

+0

Sorry, ändern Sie die UND für ein OR. Es funktioniert natürlich nicht, da es keine Zeilen gibt, die mit HELLO und i.com übereinstimmen. In der Produktion stellen Sie sicher, dass Sie "@ i.com" verwenden, sonst bini.com und benni.com oder alles, was mit einem i.com endet abgestimmt sein. Gleiches gilt für die Verwendung von Wörtern. Dabei werden alle E-Mails mit diesen Teilen abgeglichen. –

0

Sie die reult ausgesuchter fro direkt

löschen verwenden könnten Sie Sie

SELECT data FROM ".TABLE_PREFIX."datastore WHERE title = 'banemail'" 

dann

("DELETE 
    FROM " .TABLE_PREFIX ."user 
    WHERE email in ( SELECT data 
     FROM " .TABLE_PREFIX."datastore 
     WHERE title = 'banemail'"); 
+0

Wenn ich dies über ein Plugin ausführen, erhalte ich einen Fehler: Parse-Fehler: Syntaxfehler, unerwartete 'SELECT' (T_STRING) in /global.php(29): eval() 'd code on line 3 – John

+0

zeigen Sie mir die genaue Fehlermeldung .. und wenn Sie Ihre Frage aktualisieren können die genaue Sie verwenden .. Kommentar mich, wenn fertig – scaisEdge

+0

'Datenbank Fehler in vBulletin 4.2.3: Ungültige SQL: VON tf_user DELETE WHERE E-Mail in (Daten SELECT FROM tf_datastore WHERE title = 'banemail'; MySQL Fehler: Sie haben einen Fehler in der SQL-Syntax, das Handbuch, das entspricht Ihre MariaDB-Serverversion für die richtige Syntax in der Nähe von '' in Zeile 5 Fehlernummer: 1064 Anfragedatum: Donnerstag, 26. Januar 2017 @ 04:13:28 PM Fehlerdatum: Donnerstag, 26. Januar 2017 @ 04:13 : 28 PM Klassenname: vB_Database MySQL Version: 5.5.52-MariaDB' – John