mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Mo 29.04.2024 00:49 Benutzername: Passwort: Auto-Login

Thema: PHP: Wie zwei Anfragen richtig kombinieren? vom 06.05.2008


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> PHP: Wie zwei Anfragen richtig kombinieren?
Seite: Zurück  1, 2
Autor Nachricht
m
Moderator

Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Mi 07.05.2008 15:41
Titel

Antworten mit Zitat Zum Seitenanfang

Snifferdog hat geschrieben:
Hi,
..was spricht denn gegen den Universalsektor ? ... Ich benutze ihn eigentlich auch recht häufig ... Menno!
Ist doch sehr viel einfacher als alle Spalten einzeln auf zu schreiben * Keine Ahnung... *


Sorry, das habe ich wohl etwas undeutlich ausgedrückt. Wenn du wirklich alle Spalten
selektieren möchtest spricht natürlich nichts dagegen, andernfalls schon, weshalb sollte
klar sein oder nicht?
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Snifferdog

Dabei seit: 08.03.2007
Ort: Düsseldorf
Alter: 35
Geschlecht: Männlich
Verfasst Mi 07.05.2008 15:44
Titel

Antworten mit Zitat Zum Seitenanfang

Achso .. jo klar ^^
Ich dachte jetzt das wäre allgemein gemeint gewesen ...

Puh Grins

Gruß
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
TOMillr
Threadersteller

Dabei seit: 21.03.2008
Ort: -
Alter: -
Geschlecht: -
Verfasst Mi 07.05.2008 20:21
Titel

Antworten mit Zitat Zum Seitenanfang

Habe da jetzt doch noch ein Problem: Das System verwendet die ID Nummer ($row[id]), um damit auf die Artikel zu verlinken. Wenn ich nun Datensatz 1 und Datensatz 2 verbinde, komme ich aber jetzt nur noch die ID aus Datensatz 2 angezeigt.

Kann ich bei dem JOIN Befehl noch irgendie eingrenzen, WELCHE Datensätze angefordert werden? Eigentlich benötige ich nämlich die meisten Informationen aus Datensatz 1 und aus dem zweiten nur EINE ($row[box]) Information.
  View user's profile Private Nachricht senden
m
Moderator

Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Mi 07.05.2008 20:58
Titel

Antworten mit Zitat Zum Seitenanfang

Code:
SELECT a.id as id1, a.spalte, b.id as id2, b.box
FROM tabelle1 as a
INNER JOIN tabelle2 as b
ON a.id = b.a_id
WHERE a.id = $id
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
TOMillr
Threadersteller

Dabei seit: 21.03.2008
Ort: -
Alter: -
Geschlecht: -
Verfasst Do 08.05.2008 11:46
Titel

Antworten mit Zitat Zum Seitenanfang

m hat geschrieben:
Code:
SELECT a.id as id1, a.spalte, b.id as id2, b.box
FROM tabelle1 as a
INNER JOIN tabelle2 as b
ON a.id = b.a_id
WHERE a.id = $id

Ok, da ich bislang einfach mit "SELECT *" gearbeitet habe, muss ich noch mal zur Syntax fragen. Der Code im Template sieht bislang so aus:

Code:

$latest_review = mysql_query("SELECT * FROM ccms_article as a INNER JOIN ccms_gameindex as b ON a.title = b.title AND a.cat_id = b.category WHERE a.type='kritik' ORDER BY a.id DESC LIMIT 1");
while ($row = mysql_fetch_assoc($latest_review)) {

$title_start = preg_replace('/[^a-zA-Z0-9 *]/', '', $row[title]);
$title_seo = str_replace(' ', '-', $title_start);
$platform = $row[cat_id];
$box = $row[box];
echo "


Wenn ich nun "Select *" durch die einzelnen Aufrufe ersätzen will, brauche ich folgende Informationen aus der Datenbank:
$row[title] - aus a
$row[title] - aus b
$row[cat_id] - aus a
$row[category] - aus b
$row[box] - aus b
$row[id] - aus a
$row[preview] - aus a

Macht es da nicht mehr Sinn, einfach direkt mit "*" Stern zu arbeiten? Wie würde ich es dann anstellen, dass ich NUR die ID von a ausgegeben bekomme?
  View user's profile Private Nachricht senden
bacon

Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
Verfasst Do 08.05.2008 11:51
Titel

Antworten mit Zitat Zum Seitenanfang

Zitat:
Wie würde ich es dann anstellen, dass ich NUR die ID von a ausgegeben bekomme?
Auf den Universalselektor verzichten und richtigerweise die Feldnamen explizit ansprechen (!!!!)
Zitat:
Macht es da nicht mehr Sinn, einfach direkt mit "*" Stern zu arbeiten?

Der Universalselektor macht nur Sinn bei manchen optimierten Anfragen (bspw. "pseudoaggregation") => COUNT(*).

Ansonsten IMMER Feldnamen explizit schreiben, denn 1.) Kann sich dein Datenmodell mit der Zeit ändern, 2.) Mehrere Spalten gleichen Namens (a.id, b.id) überschreiben sich evtl. gegenseitig, 3.) Ist es übersichtlicher, 4.) Wartbarer, 5.) Für den Entwickler nach dir lesbarer etc. pp. Die Liste lässt sich beliebig fortführen. Und jetzt ließ die verdammte Doku!


Zuletzt bearbeitet von bacon am Do 08.05.2008 11:51, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
TOMillr
Threadersteller

Dabei seit: 21.03.2008
Ort: -
Alter: -
Geschlecht: -
Verfasst Do 08.05.2008 12:15
Titel

Antworten mit Zitat Zum Seitenanfang

Ok ok, ich gebe mich geschlagen und schicke das gute alte Sternchen in Rente *zwinker*

Wenn ich die Feldnamen im SELECT direkt anspreche, wie habe ich dann im ECHO Teil Zugriff auf diese Informationen? Entpricht das dann der Abfolge "$Spalte"? Was mache ich dann mit dieser Rewrite-Rule, in meinem Beispiel verwendet wurde?
  View user's profile Private Nachricht senden
DragonSoftware

Dabei seit: 21.05.2008
Ort: Greifswald
Alter: -
Geschlecht: Männlich
Verfasst Mi 21.05.2008 19:44
Titel

Antworten mit Zitat Zum Seitenanfang

Hallo,

Also wenn du statt * jeden einzelnen Spalten namen nennst, welchen du brauchst, dann wird die gesamte abfrage der mysql beschleunigt. manchmal ist es nur im 1000stel sekundenbereich aber bei sehr komplexen und größeren anwendungen mit einigen 100.000 datensätzen und mehr geht das dann schon in den sekundenbereich.

Nehmen wir an du hast eine Tabelle A mit den Spalten id, name, info, url und du fragst mit * ab.

Dann bekommst du dein array $row wie folgt:

row=>array([0]=>array([0]=>id, [1]=>name, [2]=>info, [3]=>url))

machst du nun einen select mit der einzelnen Spalte die du wirklich benötigst (id, name, url) dann sieht das Array wie folgt aus:

row=>array([0]=>array([0]=>id, [1]=>name,[2]=>url))


wie du siehst, hast du nur die Daten im array, welche du auch benötigst und das hilft zum einen (Server)Speicher zusparen zum anderen bringt es Geschwindigkeit in deine Scripte.

Zur Ansprechbarkeit der einzelen Arrayteile:

Nummerische Schlüssel werden ohne Hochkomma Alphanummerische immer mit Hochkomma angesprochen!

Bsp:

Nummerischer Key: $row[0]

Alphanummerischer Key: $row['id']

ich hoffe das hilf ein wenig, bin kein lehrer sondern Programmierer *zwinker*
  View user's profile Private Nachricht senden
 
Ähnliche Themen Bilder aus zwei Ordnern kombinieren
Formular mit Bereichen und dazugehörigen Anfragen
Zwei <Forms>, Zwei Checkboxen und ein Problem
epub und PDF - wie kombinieren?
Bild und mp3 kombinieren
Flash: Schlüsselbilder kombinieren
Neues Thema eröffnen   Neue Antwort erstellen Seite: Zurück  1, 2
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.