Autor |
Nachricht |
m
Moderator
Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht:
|
Verfasst Mi 07.05.2008 15:41
Titel
|
|
|
Snifferdog hat geschrieben: | Hi,
..was spricht denn gegen den Universalsektor ? ... Ich benutze ihn eigentlich auch recht häufig ...
Ist doch sehr viel einfacher als alle Spalten einzeln auf zu schreiben |
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?
|
|
|
|
|
Snifferdog
Dabei seit: 08.03.2007
Ort: Düsseldorf
Alter: 35
Geschlecht:
|
Verfasst Mi 07.05.2008 15:44
Titel
|
|
|
Achso .. jo klar ^^
Ich dachte jetzt das wäre allgemein gemeint gewesen ...
Puh
Gruß
|
|
|
|
|
Anzeige
|
|
|
TOMillr
Threadersteller
Dabei seit: 21.03.2008
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Mi 07.05.2008 20:21
Titel
|
|
|
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.
|
|
|
|
|
m
Moderator
Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht:
|
Verfasst Mi 07.05.2008 20:58
Titel
|
|
|
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 |
|
|
|
|
|
TOMillr
Threadersteller
Dabei seit: 21.03.2008
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Do 08.05.2008 11:46
Titel
|
|
|
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?
|
|
|
|
|
bacon
Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Do 08.05.2008 11:51
Titel
|
|
|
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
|
|
|
|
|
TOMillr
Threadersteller
Dabei seit: 21.03.2008
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Do 08.05.2008 12:15
Titel
|
|
|
Ok ok, ich gebe mich geschlagen und schicke das gute alte Sternchen in Rente
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?
|
|
|
|
|
DragonSoftware
Dabei seit: 21.05.2008
Ort: Greifswald
Alter: -
Geschlecht:
|
Verfasst Mi 21.05.2008 19:44
Titel
|
|
|
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
|
|
|
|
|
|
|
|
Ä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
|
|