SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

PHP 5.3 & MySQL 5.1

PHP 5.3 & MySQL 5.1 zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)
Hilfe Community Kalender Heutige Beiträge Suchen

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 27.09.2008, 22:45:07
escape123 escape123 ist offline
Anfänger
 
Registriert seit: Sep 2008
Alter: 49
Beiträge: 7
Select 2 tabellen mit Zuordnung

Hallo Community, ich versuche die ganze Zeit meine 2 Tabellen zu selecten.
Sobald ich ich WHERE anwenden kommt es zu fehlern und die Ausgabe wird blockiert. Vielleicht wisst Ihr Rat ? Habe 2 Sql Bücher hier die allerdings behandeln Join sehr schwach und ich weiss garnicht richtig wie ich das ordentlich anwende. Wäre für Tipps und Tricks wirklich dankbar.

Gruß Thomas

Simple gesagt:
Tabelle -> user den "username" & "email"
und aus
Tabelle -> user_data das "gold" & "titan"
Zuordnung -> "userid"



Fehlerausgabe
Code:
{query}
Database Error : 1052 : Feld 'user_id' in where clause ist nicht eindeutig

{string}

SELECT
    username,
    user_data.gold
FROM
    user
INNER JOIN
    user_data
ON
    user_data.gold = user_data.gold
WHERE
   user_id = '1';
Der Select
Code:
		$sql="
			SELECT
				username,
				user_data.gold
			FROM 
				user
			INNER JOIN 
				user_data 
			ON
				user_data.gold = user_data.gold
			WHERE
				user_id = '".$_SESSION['userid']."';
			";
			
		$result = $db->query($sql); 

		while($row = mysql_fetch_assoc($result))
		{
		$resis = $row;
		}

		$my = mysql_query($sql);
Mit Zitat antworten
  #2  
Alt 27.09.2008, 23:32:55
Curtains Curtains ist offline
Anfänger
 
Registriert seit: Sep 2008
Alter: 54
Beiträge: 37
AW: Select 2 tabellen mit Zuordnung

Hallo escape123,

das Problem liegt daran, dass 'user_id' als Feld in beiden Tabellen (user & user_data) vorkommt. Und daher ist es nicht eindeutig auf welche Tabelle sich die Bedingung 'user_id = 1' bezieht.

Das Problem kann zum Beispiel mit Kurzbezeichnungen der Tabellen gelöst werden:

PHP-Code:
SELECT
    u
.username,
    
ud.gold
FROM
    user u
JOIN
    user_data ud
ON
    ud
.gold u.gold
WHERE
   u
.user_id '1'
Mit Zitat antworten
  #3  
Alt 28.09.2008, 00:17:12
escape123 escape123 ist offline
Anfänger
 
Registriert seit: Sep 2008
Alter: 49
Beiträge: 7
AW: Select 2 tabellen mit Zuordnung

Wie ... ich ... das verstehe ich nicht ganz.

Habs versucht so wie du sagst umzusetzten das klappt nicht.
Aus der zweiten Tabelle bekomme ich immer den falschen wert.

Das verwirrt mich gerade wirklich.
nach welchen kriterien kann man die abkürzen und wie erkennt Mysql meine Abkürzung ?
user_data kann ich doch nicht einfach ud nennen oder irre ich mich da ?

Code:
		$sql="
				SELECT
					u.username,
					ud.eisen
				FROM 
					user u
				JOIN 
					udata ud
				ON
					ud.eisen = ud.eisen 
				WHERE
					u.user_id = '".$_SESSION['userid']."'
			";


So geht es aber ichverstehe nicht warum das so geht.
Code:
		$sql="
				SELECT 
					gold, eisen, username, user_id
				FROM 
					userdata
				INNER JOIN 
					user USING(user_id)
				WHERE 
					user_id = '".$_SESSION['userid']."'
			";

Geändert von escape123 (28.09.2008 um 00:46:53 Uhr)
Mit Zitat antworten
  #4  
Alt 28.09.2008, 08:51:28
bitwurst bitwurst ist offline
Anfänger
 
Registriert seit: Aug 2008
Alter: 51
Beiträge: 30
AW: Select 2 tabellen mit Zuordnung

hallo,

den falschen wert bekommst du, weil die Verknüpfung beider Tabellen mit ON falsch ist:

ud.eisen = ud.eisen
--> ud.eisen = u.eisen

Die einfache Abfrage:
SELECT username FROM user

könnte auch so formuliert werden:
SELECT user.unsername FROM user
SELECT u.username FROM user u
SELECT u.username FROM user AS u

also:
Gib mir aus der Tabelle username, die im Weiteren als 'u' Bezeichnet wird, den Wert
der Spalte username. Man kann also für eine Tabelle einen Alias-Namen vergeben. Ist
hier natürlich nicht nötig...

Wenn du dir aus zwei Tabellen die ID geben lassen willst:
SELECT id, id FROM tabelleA, tabelleB
--> haut nicht hin, da mysql ja nicht weiß welches 'id' welcher tabelle zugeordnet werden soll.

SELECT tabelleA.id, tabelleB.id FROM tabelleA, tabelleB
--> haut hin

Alternativ:
SELECT a.id, b.id FROM tabelleA a, tabelleB b
oder
SELECT a.id, b.id FROM tabelleA AS a, tabelleB AS b

Mit:

SELECT ...
FROM userdata
INNER JOIN user USING(user_id)

ist es etwas anders:

Verknüpfe die userdata-Tabelle mit der Tabelle user und verwende zum Verknüpfen das Feld user_id. Beim verwenden von USING muss aber das angegebene Feld user_id in beiden Tabellen vorhanden sein, sonst gibts eine Fehlermeldung!

Die Bedingung:
WHERE user_id = '".$_SESSION['userid']."'
bezieht sich dann automatisch auf das Feld user_id der verknüpften Tabelle user, glaub ich.

j.

Geändert von bitwurst (28.09.2008 um 08:55:32 Uhr)
Mit Zitat antworten
  #5  
Alt 07.10.2008, 02:10:29
escape123 escape123 ist offline
Anfänger
 
Registriert seit: Sep 2008
Alter: 49
Beiträge: 7
AW: Select 2 tabellen mit Zuordnung

Ich habe es mal so geschrieben. Allerdings fällt mir auf das ich so nicht mehr als einen User selecten/verknüpfen kann. Es befinden sich aber 25 User dort. Ich würde gern die 25 User selecten und nicht einen.


PHP-Code:
        $sql="
                SELECT 
                    a.*, b.*
                FROM 
                    dwars AS a , user_data AS b
                INNER JOIN 
                    user_data USING(user_id)
                WHERE 
                    omni1 = 67
                AND
                    omni3 = 9
                LIMIT 25
            "
;
            
        
$line9 = array();
        
$result $db->query($sql); 
        while(
$row mysql_fetch_assoc($result))
        {
        
$line9[] = $row;
        }
        
$my mysql_query($sql);

echo 
"<pre>";
#echo "friend";
print_r($line9); 
Ich kann ja nicht schreiben:
PHP-Code:
        $sql="
                SELECT 
                    a.*, b.*
                FROM 
                    dwars AS a , user_data AS b
                INNER JOIN 
                    user_data USING(user_id)
                WHERE 
                    omni1 = 67
                                AND
                                       omni2 = 1, 2, 3, 4, 5, 6, 7 ,8 ,9 , ..., 24, 25
                AND
                    omni3 = 9
                LIMIT 25
            "
;
            
        
$line9 = array();
        
$result $db->query($sql); 
        while(
$row mysql_fetch_assoc($result))
        {
        
$line9[] = $row;
        }
        
$my mysql_query($sql);

echo 
"<pre>";
#echo "friend";
print_r($line9); 
Wie muss ich mich bei solchen selects verhalten sofern das überhaupt möglich ist?
Ausserdem danke für die Erklärung "bitwurst" was das mit den selects auf sich hat.
Ich habe den Verdacht wenn ich solche Verknüpfungen erstelle kann man mehrere User nicht gleichzeitig selecten, verknüpfen und ausgeben ?


Gruß Thomas
Mit Zitat antworten
  #6  
Alt 07.10.2008, 07:29:00
Curtains Curtains ist offline
Anfänger
 
Registriert seit: Sep 2008
Alter: 54
Beiträge: 37
AW: Select 2 tabellen mit Zuordnung

Das geht nicht:

PHP-Code:
omni2 1234
aber das sollte gehen:

PHP-Code:
omni2 IN (12345

Noch ein Tip: Benutze die explizite Schreibweise für JOINS. Sie ist lesbarer und SQL-naher (= schneller).

Deine Query würde dann ungefähr so aussehen:

PHP-Code:
SELECT
    
*
FROM
    dwars a
JOIN
    user_data b
ON
    b
.user_id a.user_id
AND
    ...
WHERE
    
... 
Mit Zitat antworten
  #7  
Alt 08.10.2008, 01:26:41
escape123 escape123 ist offline
Anfänger
 
Registriert seit: Sep 2008
Alter: 49
Beiträge: 7
AW: Select 2 tabellen mit Zuordnung

Habe das nun in verschiedenen Varianten versucht und es klappt einigermaßen. Konflikte treten aber trotzdem auf wenns komplexer wird.
Vielleicht ist men Ansatz der Denkweise nicht richtig.

Ich habe ein Spielfeld (ohne weitere Funktionen) gebastelt PHP/MySql/Smarty
20x25 Felder = 500 Felder

Schwarze Felder bedeutet das dieses Feld leer ist
Blaue Felder zeigen an das dort ein User wohnt.

Der User hat z.B die Koordinaten 67:18:9
Quadrant -> 67 = Spielfeldnummer
Zahl 9 -> Reihe 9
Zahl 18 -> Feld18

Das Gesamte Spielfeld schaut so aus.
http://gebäudereinigung-diepholz.de/.../spielfeld.gif
Quadrant ist die Spielfeldnummer ich habe das 20 Reihen mit 25 Spalten

Ich lese alle User einer Reihe aus ergo 25 User welche ich dann in einem Rutsch ausgebe und prüfe ob das Feld vergeben ist oder nicht.
Das mache ich 20 mal und habe dann meine 500 Felder generiert.

Damit es nun nicht zu verwirrend wird, für Euch und mich ;) werde ich meine Frage auf Reihe 9 begrenzen. Das schaut nun so aus.
http://gebäudereinigung-diepholz.de/...elfeld_min.gif

Ich lese die Komplette Reihe aus:
PHP-Code:
$sql "
        SELECT 
            *
        FROM 
            dwars
        WHERE
            omni1 = 67
        AND
            omni3 = 9
        LIMIT
            25
        "
;
        
$line9 = array();
        
$result $db->query($sql); 
        while(
$row mysql_fetch_assoc($result))
        {
        
$line9[] = $row;
        }
        
$my mysql_query($sql);

...
$tpl->assign('line9',$line9); 
Ich gebe die Komplette Reihe aus in der Tpl:
PHP-Code:
<tr>
    {foreach 
from=$line9 item=line9 name=line9}
        <
td>
        
            {if 
$line9.ok >'1'}
                <
img id="m" src="{$I}">
            {else}
                <
div id="balloon9{$smarty.foreach.line9.index}" class="balloonstyle">{$line9.username}</div>
                <
a href="commander.php?c={$line9.omni0}" rel="balloon9{$smarty.foreach.line9.index}">
                <
img id="m" src="{$A}"></a>
            {/if}
            
        </
td>
    {/foreach}
</
tr
Ausgabe ist genauso wie ich sie benötige allerdings ohne Freundanzeige:
Code:
Array
(
    [0] => Array
        (
            [user_id] => 33509
            [omni0] => 67:1:9
            [omni1] => 67
            [omni2] => 1
            [omni3] => 9
            [username] => a
            [basename] => a
            [clan] => a
            [rank] => a
            [ok] => 9
        )

    [1] => Array
        (
            [user_id] => 33529
            [omni0] => 67:2:9
            [omni1] => 67
            [omni2] => 2
            [omni3] => 9
            [username] => a
            [basename] => a
            [clan] => a
            [rank] => a
            [ok] => 9
        )

   ... gekürzt ...

    [14] => Array
        (
            [user_id] => 33789
            [omni0] => 67:15:9
            [omni1] => 67
            [omni2] => 15
            [omni3] => 9
            [username] => a
            [basename] => a
            [clan] => a
            [rank] => a
            [ok] => 9
        )

    [15] => Array
        (
            [user_id] => 33809
            [omni0] => 67:16:9
            [omni1] => 67
            [omni2] => 16
            [omni3] => 9
            [username] => Filome
            [basename] => Darktown
            [clan] => -
            [rank] => Pilot
            [ok] => 1
        )

    [16] => Array
        (
            [user_id] => 33829
            [omni0] => 67:17:9
            [omni1] => 67
            [omni2] => 17
            [omni3] => 9
            [username] => a
            [basename] => a
            [clan] => a
            [rank] => a
            [ok] => 9
        )

    [17] => Array
        (
            [user_id] => 33849
            [omni0] => 67:18:9
            [omni1] => 67
            [omni2] => 18
            [omni3] => 9
            [username] => Rammeltron
            [basename] => Rammelhausen
            [clan] => Excalibur
            [rank] => Pilot
            [ok] => 1
        )

    [18] => Array
        (
            [user_id] => 33869
            [omni0] => 67:19:9
            [omni1] => 67
            [omni2] => 19
            [omni3] => 9
            [username] => Ba`al
            [basename] => Sarkophag
            [clan] => Excalibur
            [rank] => LanceCorporal
            [ok] => 1
        )

    [19] => Array
        (
            [user_id] => 33889
            [omni0] => 67:20:9
            [omni1] => 67
            [omni2] => 20
            [omni3] => 9
            [username] => a
            [basename] => a
            [clan] => a
            [rank] => a
            [ok] => 9
        )

     ... gekürzt ...

    [24] => Array
        (
            [user_id] => 33989
            [omni0] => 67:25:9
            [omni1] => 67
            [omni2] => 25
            [omni3] => 9
            [username] => a
            [basename] => a
            [clan] => a
            [rank] => a
            [ok] => 9
        )

)
Bis hierher ist es simple und selbst ich als Anfänger weiss was passiert. Nun aber der Teil wo ich einfach überfordert bin.
Mein Feld ist 67:18:9 den Usen neben mir möchte ich gern als Freund anzeigen lassen. Was aber einfach nicht klappt.
Wie handhaben weil ich ja mehr als 1 Freunde haben werde?

DB Struktur
Code:
Tabelle dwars
            [user_id] => 33849
            [omni0] => 67:18:9
            [omni1] => 67
            [omni2] => 18
            [omni3] => 9
            [username] => Rammeltron
            [basename] => Rammelhausen
            [clan] => Excalibur
            [rank] => Pilot
            [ok] => 1

Tabelle user_data
            [id] => 1
            [user_id] => 33849
            [friend_id] => 33869
            [enemy_id] => 0
Nun habe ich das mal so geschrieben:
PHP-Code:
$sql="
                SELECT 
                    *
                FROM
                    dwars a
                JOIN
                    user_data b
                ON
                    a.user_id = b.user_id
                WHERE 
                    omni1 = 67
                AND
                    omni3 = 9
                LIMIT 25
            "
;
            
        
$line9 = array();
        
$result $db->query($sql); 
        while(
$row mysql_fetch_assoc($result))
        {
        
$line9[] = $row;
        }
        
$my mysql_query($sql);
echo 
"<pre>";
#echo "friend";
print_r($line9); 
Array Ausgabe
Code:
Array
(
    [0] => Array
        (
            [user_id] => 33849
            [omni0] => 67:18:9
            [omni1] => 67
            [omni2] => 18
            [omni3] => 9
            [username] => Rammeltron
            [basename] => Rammelhausen
            [clan] => Excalibur
            [rank] => Pilot
            [ok] => 1
            [id] => 2
            [friend_id] => 33869   <-- Die ID des Freundes rechts neben mir
            [enemy_id] => 0
            [another] => 0
        )

)
So nun habe gibt er meine Daten aus und wer mein Freund ist aber so hatte ich mir das nicht gedacht.

1.) Alle 25 Koordinaten der Reihe auslesen
2.) Prüfen ob Jemand auf dem Feld sitzt
3.) Wenn kein Spieler zeige scharz
4.) Wenn Spieler da zeige blau
###--- bis hier klappt es ---###
5.) Wenn Spieler da und Freund zeige Gelb <--- das bekomme ich einfach nicht hin.

Ich bin mir sicher das das geht aber ich denke Quer.
Wie soll ich das umsetzten ? Da wenn ich Join benutze den Verdacht habe das er meine Arrays nur ausgibt wenn auch in der user_data ein Eintrag besteht.
Aber es gibt doch mehr als 90% Felder die leer sind oder nicht meine Freunde. Die müssen doch auch mit ausgegeben werden.

Wäre nochmal für Tips, Tricks und Ideen für die Umsetzung sehr dankbar.
Denn bei mir ist irgendwie der Wurm drin.
Gruß Thomas
Mit Zitat antworten
  #8  
Alt 08.10.2008, 10:28:37
Curtains Curtains ist offline
Anfänger
 
Registriert seit: Sep 2008
Alter: 54
Beiträge: 37
AW: Select 2 tabellen mit Zuordnung

Ich bin mir nicht sicher, ob ich dein Spielkonzept verstanden habe. Aber eine gute Tabellenstruktur ist als Basis wichtig.

Hier ist mein Vorschlag, wie die Tabellenstruktur aussehen könnte:

PHP-Code:
[user]
user_id username clan_id rank_id field_id |
---------------------------------------------------

[
rank]
rank_id caption |
-------------------

[
clan]
clan_id clanname |
--------------------

[
field] <-- Spielfelder durchnummeriert
field_id |
------------

[
user_friend_rel] <-- Freundesliste (1:n Beziehung)
user_id friend_user_id |
---------------------------- 
p.s. 'friend_user_id' bezieht sich auf eine 'user_id' aus der Tabelle 'user'.

Geändert von Curtains (08.10.2008 um 10:30:17 Uhr)
Mit Zitat antworten
  #9  
Alt 08.10.2008, 22:12:59
escape123 escape123 ist offline
Anfänger
 
Registriert seit: Sep 2008
Alter: 49
Beiträge: 7
AW: Select 2 tabellen mit Zuordnung

Nein das wird kein Spiel.

Ich möchte ledeglich aus einer DB die Daten wiedergeben und dem User ermöglichen Felder zu verwalten. Da das Spiel sowas nicht unterstützt. Daher rührt meine Idee.

Ich habe die Datenbank des Browsergames und will dem user nur eine Möglichkeit einräumen mit einer art Organizer, Freunde oder Feinde zu markieren oder sich darüber notizen zu machen.

Eine Map Verwaltung für Onlinespieler da es soviele Spieler gibt und nicht alles im Kopf behalten kann ;)
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Frage zur Verknüpfung v. Tabellen in SELECT und Datenbankstruktur mrweasel MySQLi/PDO/(MySQL) 8 05.05.2008 20:54:19
Select mit verknüpften Tabellen m:n Hanf24 MySQLi/PDO/(MySQL) 5 20.04.2005 15:36:34
select abfrage über zwei Tabellen nicoscript.de MySQLi/PDO/(MySQL) 2 04.05.2004 08:47:09
Select Abfrage für 2 Tabellen muc PHP für Fortgeschrittene und Experten 2 16.08.2003 13:33:25
To Many Connections ProGamer11 PHP Grundlagen 0 18.06.2003 23:52:56


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:56:37 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt