dedlfix: 13 Stück MySQL Fragen mit wenig Perl dabei

Beitrag lesen

Hier noch ein paar Antworten

1)  Groß und Kleinschreibung:
     - Was macht man um es Case Sensitive zu bekommen?

Stichwort BINARY

5)   Kann man ein Ergebnis weiter verwenden?
    Zuerst aus table1 das Feld "email" von allen Einträge selektieren,
    deren "name" mit "a" beginnt,
    und dann im "table2"  schauen wo die gleichen emails im Feld "kontakt" steht,
    und davon die "d_id"  ausgeben.
    geht das ohne das Zwischenspeichern zu müssen in einer Programmiersprache?

geht mit table joins
SELECT table2.d_id FROM table1, table2 WHERE table1.name LIKE 'a%' AND table1.email=table2.kontakt

  1. Perl:  Heisst es [...]
      Also mit oder ohne Komma ( => Semikolon!) am Ende - innerhalb der Klammern?

Da das m.E. eine Sache der MySQL-API ist, und es bei PHP egal ist, sollte bei Perl auch egal sein. Probier es aus!

  1. Wie geht es  2 Felder gleichzeitig zu selectieren,
      und dann einen speziellen Feldnamen zu verweben den man mit  "AS"  bestimmt?
      Also selectieren irgendwas  AS  <wunschname_des_feldes>

Meinst du CONCAT bzw. CONCAT_WS ?  SELECT CONCAT(feld1, feld2) AS feldname FROM ...

  1. Was kann man   $sth->rows()  sagen statt  COUNT() ?  (Beides zählt)
       Welches ist besser, weches kann was?  Infos?

SELECT COUNT() nimmst du, wenn du nur die Anzahl wissen willst. SELECT bla FROM ... und dann die Zeilen zählen nimmst du, wenn du sowohl die Anzahl der Datensätze als auch diese selbst brauchst. Soweit zur Theorie. Wie ich eben las (kenne mich mit Perl nicht so aus), liefert row() insbesondere bei SELECTs nicht immer (datenbankabhängig) die richtigen Ergebnisse.

  1. Das sollte herauskommen:
        select id, name, text from guestbook limit 2,3;
        Ich wollte es mit Platzhaltern lösen.

my $foo=2;
    my $bar=3;
    my $sth = $dbh->prepare("select id, name, text from guestbook limit ?,?");
    $sth->execute($foo, $bar);
    Die im execute angegebenen Variablen sollten die ?,? ersetzen.
    Es kommt zwar keine Fehlermeldung,
    aber auch _keine_ Ergebnisse!!

Ich vermute, dass das prepare/execute die variablen Parameter '?' quotiert, so dass am Ende die Abfrage so aussieht: select id, name, text from guestbook limit '2','3'
und wenn ich das dem MySQL verfüttere, dann erzählt es mir:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''2','3'' at line 1

  1. Wie geht das selectieren von Inhalten einem Table und das automatische
        eintragen der Felder in eine andere Tabelle?

mit INSERT ... SELECT ...

  1. Kopieren eines Tables:  table1  mit allem drum und dran (auch dem erstell-zeugs)
        kopieren nach table2.
        Also so wie wenn ich bei einem Directory  cp -R test1 test2  mache.
        Ohne dass der Table vorher existiert.

CREATE TABLE table2 SELECT * FROM table1;

MySQL kopiert allerdings die Indexe nicht mit.