Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

komplizierte Abfrage

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von alexfrenzel92, 12 Februar 2014.

  1. alexfrenzel92

    alexfrenzel92 Datenbank-Guru

    Guten Abend,

    Mir fällt kein besserer Titel ein, der mein Aliegen besser nennt.

    Aus einer Tabelle ist eine Spalte mit Zahlen bunt durchgemischt von 1-36.

    Mit
    $id = strip_tags($_GET[id]) + 0;
    und
    'SELECT * FROM `TABLE 4` WHERE `COL 1` = '.$id;
    kann ich die Zahl aus jener Spalte ermitteln, die der Zeile steht, die in der Adresszeile beschrieben ist.

    Eine weitere Tabelle (mit 36 Zeilen und einer Spalte) stehen 36 unterschiedliche Werte bzw. kurze Namen.

    In einer weiteren Abfrage will ich nun den Namen ermitteln, der in der Zeile steht, dessen Zahl in der Adresszeile steht, doch ich komme nicht darauf, wie die Abfrage lauten muss.

    Wenn jemand mitkommt, wäre ich froh, wenn mir jemand helfen kann.

    Vielen Dank und Grüße
    Alex
     
  2. akretschmer

    akretschmer Datenbank-Guru


    Du suchst einen JOIN. (sofern ich Dich richtig geparst habe).

    Also, Du hast:

    Code:
    test=*# create table namen (id int primary key, name text);
    CREATE TABLE
    test=*# insert into namen values (1,'name1');
    INSERT 0 1
    test=*# insert into namen values (2,'name2');
    INSERT 0 1
    test=*# insert into namen values (3,'name3');
    INSERT 0 1
    test=*# create table bla(name int references namen);
    CREATE TABLE
    test=*# insert into bla values (1);
    INSERT 0 1
    test=*# insert into bla values (2);
    INSERT 0 1
    test=*# insert into bla values (3);
    INSERT 0 1
    test=*# insert into bla values (2);
    INSERT 0 1
    test=*# insert into bla values (1);
    INSERT 0 1
    test=*# select * from namen ;
     id | name
    ----+-------
      1 | name1
      2 | name2
      3 | name3
    (3 rows)
    
    test=*# select * from bla ;
     name
    ------
      1
      2
      3
      2
      1
    (5 rows)
    [code]
    
    Du willst nun in bla hinter jeder Nummer den Namen ans der Tabelle namen haben:
    
    [code]
    test=*# select bla.name, namen.name from bla left join namen on bla.name=namen.id;
     name | name
    ------+-------
      1 | name1
      2 | name2
      3 | name3
      2 | name2
      1 | name1
    (5 rows)
    
    So, nun lern Grundlagen! Das ist massig dokumentiert. Suche nach join.
     
    alexfrenzel92 gefällt das.
  3. alexfrenzel92

    alexfrenzel92 Datenbank-Guru

    Danke für die schnelle Antwort

    Das werde ich - bisher ist mir die Sache zu hoch bzw. für den Moment zu aufwendig, weil ich SQL so gut wie noch nie programmiert habe.

    Wie gesagt, danke für die Antwort - ich bin mir sicher, ihr ist nichts hinzuzufügen ;)
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Du wolltest vor knapp einem Jahr schon anfanegn, Grundlagen zu lernen. Steht alles hier im Forum ;-)
     
    alexfrenzel92 gefällt das.
  5. alexfrenzel92

    alexfrenzel92 Datenbank-Guru

    oha, ich sehe die Abfrage aus der Adresszeile weiß ich auch von hier... btw mir gefällt das forum! gute atmosphäre hier!
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Echt? Schön! Dann verteil doch mal 'Gefällt mir' ;-)
     
    alexfrenzel92 gefällt das.
  7. alexfrenzel92

    alexfrenzel92 Datenbank-Guru

    ich hatte ganz vergessen, dass das hier möglich ist...
     
  8. alexfrenzel92

    alexfrenzel92 Datenbank-Guru

    Also ich nähere mich der Lösung für dieses Anliegen langsam.

    Als Fehlermeldung kommt nun leider:
    Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in ......

    Die Abfrage lautet:
    Code:
    'SELECT * FROM `TABLE 4` LEFT OUTER JOIN `Table 1` ON `Table 1.COL 1` = `TABLE 4.COL 10` WHERE `TABLE 4.COL 1` = '.$id;
    Ist das jetzt php oder immernoch sql - und, wenn sql wo könnte der Fehler liegen?
    Danke für eure Hilfe und guten Abend!
     
  9. Hony%

    Hony% Datenbank-Guru

    Das ist immer noch PHP. Die Fehlermeldung deutet darauf hin, dass mysql_query() fehlgeschlagen ist.
     
    alexfrenzel92 gefällt das.
  10. alexfrenzel92

    alexfrenzel92 Datenbank-Guru

    okay danke für die info - dann kann dieser thread von mir aus geschlossen werden :)
     
  11. alexfrenzel92

    alexfrenzel92 Datenbank-Guru

    oder auch doch nicht :)

    Bei folgender Abfrage

    'SELECT * FROM `TABLE 4` LEFT OUTER JOIN `TABLE 1` ON `TABLE 4`.`COL 10` = `TABLE 1`.`COL 1` WHERE `TABLE 4`.`COL 1` = '.$id;

    ...kommt immernoch die Spalte 1 (der TABLE 1) eins im Ergebnis.
    Ich will jedoch Spalte 2 (der TABLE 1) im Ergebnis.

    Wo muss ich `TABLE 1`.`COL 2` unterbringen, damit sie anstelle von `TABLE 1`.`COL 1` angezeigt wird?
     
  12. akretschmer

    akretschmer Datenbank-Guru

    Angezeigt wird das, was nach select und vor JOIN bzw. FROM kommt. Das * sollte man (ver)meiden und dafür richtig aufzählen, was man sehen will.

    Nummer in Spalten- und Tabellennamen sind oft dezente Hinweise auf ein kapottes Design, Leerzeichen in Table- und/oder Spaltennamen sind ganz übel.
     
  13. Hony%

    Hony% Datenbank-Guru

    Die SQL-Spezifikation sieht keine verbindlichen Regeln für die Reihenfolge der Spalten vor. Theoretisch könnten die Spalten also bei jeder Abfrage an einer anderen Stelle stehen. Zusätzlich kommt abhängig vom Datenbankdesign dazu, dass ggf. auch große BLOBs ausgeliefert werden die nicht benötigt werden.
     
  14. alexfrenzel92

    alexfrenzel92 Datenbank-Guru

    hm okay, ich selbst komme nicht auf die Lösung, es kommen immer wieder Fehlermeldungen.
    Ich schreibe deswegen jetzt eine genaue Beschreibung der Datenbanken/php-Codes und würde mich freuen, wenn mir jemand die Lösung erarbeiten könnte.

    Es ist jetzt sozusagen gemischt php und sql also hoffe ich, dass es okay ist, wenn ich das Anliegen in das Datenbank-forum und nicht in ein php-forum schreibe.

    Ich habe zwei Tabellen (TABLE 4 und TABLE 1)
    In TABLE 4 (COL 10) stehen bunt durchgemischt Zahlen von 1-30, wobei auch jede Zahl öfter vorkommen kann.
    In TABLE 4 (COL 1) stehen sortiert mehr als 100 Zahlen, wobei jede nur einmal vorkommt (=100+ Zahlen)
    In TABLE 1 (COL 1) stehen die Zahlen 1-30 in COL 2 steht dabei ein individueller Name, wobei jede Zahl und jeder Name jeweils nur einmal vorkommt (= 30 Einträge)

    In der Adresszeile steht am Ende &id=? wobei eine Zahl von 1 bis etwas mehr als 100 eingetragen wird

    Die erste Abfrage lautet:
    Code:
    $id = strip_tags($_GET[id]) + 0;
    $abfrage = 'SELECT * FROM `TABLE 4` WHERE `COL 1` = '.$id;
    $ergebnis = mysql_query($abfrage);
    while($row = mysql_fetch_row($ergebnis)
    Mit <?php echo $row[...]; ?> kann ich die Einträge der Zeile abrufen, deren "COL 1" der eingetragenen Zahl in der Adresszeile entspricht.
    Das funktioniert soweit.

    Die zweite Abfrage lautet in etwa (wobei der Code fehlerhaft sein dürfte - ich schreibe ihn nur, damit man sich an ihm oriertieren kann, was ich wirklich vorhabe):
    Code:
    $id = strip_tags($_GET[id]) + 0;
    $abfrage1 = 'SELECT * FROM `TABLE 4` LEFT OUTER JOIN `Vereine` ON `TABLE 4`.`COL 10` = `Vereine`.`COL 1` WHERE `TABLE 4`.`COL 1` = '.$id;
    $ergebnis1 = mysql_query($abfrage1);
    while($row = mysql_fetch_row($ergebnis1)
    Mit
    Code:
    <b><a href="index.php?var=Verein&id=<?php echo $row[x1]; ?>" style="color:black"><?php echo $row[x2]; ?></a></b>
    ...will ich nun bei x1 die Zahl aufrufen, die in COL 10 der TABLE 4 der Zeile abrufen, die in der Adresszeile steht
    ...bei echo $row[x2] soll nun der Name aus TABLE1.COL2 stehen, der in der Zeile steht, die bei der gerade ermittelten Zahl (aus TABLE 4.COL10) steht.

    Die erste Abfrage, wie gesagt, funktioniert problemlos - die zweite Abfrage auch, nur, dass bei x2 nicht der Name (aus TABLE1.COL2) steht, sondern auch die Zahl, die ich gerade aus (aus TABLE 4.COL10) ermittelt habe.

    Ich will aber den Namen (der in der TABLE1.COL2 steht) ermittelt bekommen, der in der Zeile steht, die mein Browser anzeigt (anstatt des Namen in der Spalte daneben), wie erwünscht...

    Ich habe es, wie gesagt nicht hingekriegt, vielleicht bekommt es von euch einer hin...
    Danke im vorraus
     
  15. Hony%

    Hony% Datenbank-Guru

    Code:
    `TABLE 4`.`COL 10` = `Vereine`.`COL 1`
    Wo kommt jetzt Vereine her? Vorher hast du von Table1 geschrieben.

    Sind x1 und x2 Konstanten? Und welchen Wert haben sie? Wenn es keine Konstanten sind machst du was falsch.

    Versuch doch mal:
    Code:
    SELECT `TABLE4`.`Col1`, `TABLE1`.`Col2` FROM …
    Code:
    $id = strip_tags($_GET[id]) + 0;
    In diesem Fall dürfte intval() sinnvoller sein.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden