• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Zahlen getrennt auslesen.

webber979

Neues Mitglied
Hallo Leute,

ich habe mal gehört, dass man per Komma getrennt Zahlen getrennt auslesen kann mit einem bestimmten Befehl.
z.B.

ID_friends|
-----------+
1,34,567,43,6785,
-----------+

1) Wie kann ich jetzt die Zahlen getrennt auslesen (Und wie kann ich sie überhaupt so einspeichern), damit ich die einzelnen ID's verwenden kann um Daten aus einer neuen Tabelle per ID auszulesen?

2) Geht das auch mit per Kommata getrenntem Text?

Sry, dass ich so einfache Dinge frage, auch Bücher und Weblinks können meist nicht ganz vollendet erklären ;)

webber979
 
Werbung:
Deine Hauptschwierigkeit ist, dass du ein relationales Datenbanksystem verwendest (MySQL), dir aber noch nicht klar zu sein scheint, was ein relationales Datenbanksystem überhaupt ist.

- MySQL - Einleitung
- Quakenet/#php Tutorial - de - MySQL
- Relationale Datenbank

Ich kann dir in halbwegs vertretbarer Zeit keine ausführliche Erläuterung dazu schreiben.

„User ist Freund von User“ ist eine Many-to-many-Relation zwischen der Tabelle user und der Tabelle user.

So was muss in einer zusätzlichen Tabelle abgebildet werden:

Code:
user:

+----+------+
| id | name |
+----+------+
|  1 | Mia  |
|  2 | Tom  |
|  3 | Bob  |
+----+------+


user_has_friend:

+---------+-----------+
| user_id | friend_id |
+---------+-----------+
|       1 |         2 | Mia ist befreundet mit Tom
|       1 |         3 | Mia ist befreundet mit Bob
|       2 |         3 | Tom ist befreundet mit Bob
+---------+-----------+

Die Bezeichnungen sind etwas willkürlich. user_id und friend_id beziehen sich jedenfalls auf IDs aus Tabelle user.

Ob es einseitige Freundschaften gibt (Ist Tom im Beispiel oben auch mit Mia befreundet?) oder ob ein Eintrag impliziert, dass die Freundschaft beidseitig ist, ist Sache deiner konkreten Anwendung.

Siehe dazu diese Diskussion:

- MySQL - Primary Key über zwei Spalten: andersrum nicht erlauben - php.de

Wie ermittelst du alle Freunde eines Nutzers? Join.

Aus dem Kopf:

Code:
SELECT
        u.`id`,
        u.`name`
FROM
        `user_has_friend` AS uhf
INNER JOIN
        user AS u
    ON
        IF(uhf.`user_id` = $uid, uhf.`friend_id`, uhf.`user_id`) = u.`id`
WHERE
        uhf.`user_id` = $uid
    OR
        uhf.`friend_id` = $uid

$uid ist die ID des Nutzers, dessen Freunde ermittelt werden sollen.
 
Ok, du musst mir nicht mehrmals versuchen zu erklären, was MySQL ist. (Auch wenn ich dir manchmal dafür sehr dankbar bin)

1) Du hast recht nicht friend_ID sondern user_ID muss es heißen(Weil eben die ID der Tabelle user benutzt wird)

2) Ich wollte wirklich nur wissen wie ich mehrere zahlen, durch Kommatra getrennt in der Spalte user_ID verfügbar machen kann.
2 i) und sie dementsprechend auch auslesen kann?

3) Brauche ich jetzt Joins oder nicht für meine relatio...... Datenbank, wenn ich nachdem in #1 beschrieben System verfahre?
Oder kann ich das auch genauso ohne große Nachteile mit mehreren Abfragen erreichen
( ( user_ID(halt die Freunde) from tabelleuser where Nachname = $Nachname) =$variable1 ;( Datensätze from tabelleuser where ID=$variable1 ) =$ datensätze)
 
Werbung:
Über sowas denkt keiner nach, weil es fast immer falsch ist.

Wenn's denn sein muss
Kommata getrennte Daten kann man mit explode() separieren und erstellen kann man solche Konstrukte mit implode().
 
webber979 schrieb:
Ok, du musst mir nicht mehrmals versuchen zu erklären, was MySQL ist. (Auch wenn ich dir manchmal dafür sehr dankbar bin)

Ich weiß ganz ehrlich nicht, was ich darauf antworten soll. Es ist schwierig, über sinnvolle Antworten auf deine Fragen zu sprechen, wenn du das nicht zulässt beziehungsweise wenn du von der – faktisch falschen – Annahme ausgehst, dass deine Vorgehensweise sinnvoll ist, weil du die korrekte Vorgehensweise nicht absehen kannst. (Mit solchen Aussagen will ich dir nicht auf die Füße treten.)

Die Begriffe Normalisierung, Relation und Join solltest du im eigenen Interesse nicht ignorieren. Ich spreche auch aus leidvoller eigener Erfahrung.
 
Zuletzt bearbeitet:
Gut also soll ich sozusagen eine neue Tabelle erstellen die beispielsweise so aussehen kann:

user_id---friend_id
1 | 2
1 | 3
1 |4
1 |6
1 |209
1 |6007
3 |4
3 | 9
3 | 12
4 | 20
4 |49930
200 |2





Normalisierung, Relation ist bedacht wie du siehst.
Joins sind ignoriert weil ich sonst so einige scripte ohne großen ertrag noch mal schreiben müsste.

Trotzdem bin ich dir immer dankbar nur kann ich meißt, deine aussagen (erst)nicht ganz nachvollziehen,
was darauf zurückzuführend ist, dass meine Fragestellung fragwürdig ist.
 
Werbung:
Ja, genau. So in der Art.

Wenn du das Auslesen nicht per Join erledigen möchtest, kannst du es meist auch mit einer Query und dann einer zweiten Query, die in einer Schleife die Ergebnisse der ersten verarbeitet, angehen.

Alles ungetestet.

Gebe alle User-IDs aus, mit denen $userId befreundet ist:

Code:
SELECT
        IF(`user_id` = $userId, `friend_id`, `user_id`) AS `id`
FROM
        `user_has_friend`
WHERE
        `user_id` = $userId
    OR
        `friend_id` = $userId

Hole für jede dieser IDs die Daten des Nutzers ab:

Code:
SELECT
        `name`,
        ...
FROM        
        `user`
WHERE
        `id` = $id

Hat ein Nutzer 300 Freunde, sind das 301 Queries statt einer mit Join.

Ein weiteres Problem ist dabei die referentielle Integrität. Einfach gesagt: Während diese Schleife die Daten der 300 Freunde holt, könnte ein anderer Request etwas an den Freundschaftsbeziehungen modifizieren oder einen Account löschen oder so.

Das ist bei einer Abfrage wie dieser vielleicht noch nicht so tragisch, aber theoretisch muss durch eine Transaktion dafür gesorgt werden, dass solche Abfragen „am Stück“ durchgeführt werden. Bei einer einzigen Join-Query besteht das Problem nicht, weil eine Query natürlich immer „am Stück“ ausgeführt wird (atomar ist).
 
Zurück
Oben