Autor |
Nachricht |
gtz
Threadersteller
Dabei seit: 15.04.2002
Ort: -
Alter: 48
Geschlecht:
|
Verfasst Di 22.11.2005 13:58
Titel ? mysql-query |
 |
|
gegeben ist folgende query aus einem shopsystem:
Code: |
01: $query= "select
02: item.AId as id,
03: item.Txt as label,
04: item.Nr as itemno,
05: text.Text as text,
06: itemprice.preis as price,
07: manufacturer.Bez as manufacturer,
08: manufacturer.id as manufacturer_id
09: from ".$GLOBALS["config"]["db"]["tables"]["item"]." as item
10: join ".$GLOBALS["config"]["db"]["tables"]["itemtext"]." as text on item.AID=text.AId
11: join ".$GLOBALS["config"]["db"]["tables"]["itemprice"]." as itemprice on item.AID=itemprice.AId
12: join ".$GLOBALS["config"]["db"]["tables"]["manufacturer"]." as manufacturer on item.FId=manufacturer.Id
13: where item.LoeschKz!=1
14: and item.WId='".$_SESSION["category"]."'
15: and text.Nr='".$GLOBALS["config"]["language_id"]."'
16: and itemprice.PNr='".$GLOBALS["config"]["items"]["active_price"] ."'
17: order by ".$_SESSION["itemlist_orderby"]."
18: limit ".$liststart.", ".$_SESSION["listlimit"];
|
die $GLOBALS["config"]["language_id"] bezeichnet die sprache, in welcher der artikeltext ausgelesen werden soll. blöd dabei ist, dass eventuell in der jeweiligen sprache garkein text vorliegt. in diesem fall sollte dem jeweiligen artikel der text in der standardsprache $GLOBALS["config"]["std_lang"] beigegeben werden.
ich bekomms nich auf die schnur. eben im chat hat karma ne query zusammengebastelt, die zwar möglicherweise funktioniert, aber nich praktikabel is, weil sie auf einemartikelstamm von ~10000 stück nu schon ne halbe stunde läuft.
hat jemand ne idee oder nen ansatz für mich?
|
|
|
|
 |
Eistee
Administrator
Dabei seit: 31.10.2001
Ort: Grimma
Alter: 45
Geschlecht:
|
Verfasst Di 22.11.2005 18:04
Titel
|
 |
|
Wieviele Sprachen gibts denn?
|
|
|
|
 |
Anzeige
|
|
 |
gtz
Threadersteller
Dabei seit: 15.04.2002
Ort: -
Alter: 48
Geschlecht:
|
Verfasst Di 22.11.2005 18:10
Titel
|
 |
|
beliebig aber fest viele.
|
|
|
|
 |
Eistee
Administrator
Dabei seit: 31.10.2001
Ort: Grimma
Alter: 45
Geschlecht:
|
Verfasst Di 22.11.2005 18:16
Titel
|
 |
|
Wenn es den Text in der Sprache nicht gibt geht das Query gar nicht? Wenn dem nicht so ist, würde ich immer den Text in der gewählten Language selecten und den Standard-Text, und dann den als Fallback in [Scriptsprache deiner Wahl] verwenden.
Dürfte dank dem LIMIT im Query performanter sein als das Query weiter aufzubohren, und Artikeltexte sind ja meist auch keine 100 Seiten...
|
|
|
|
 |
gtz
Threadersteller
Dabei seit: 15.04.2002
Ort: -
Alter: 48
Geschlecht:
|
Verfasst Di 22.11.2005 18:19
Titel
|
 |
|
durch das join zwischen artikelstammsatz und text mit der bedingung der text-nr im where überlebt der betreffende artikel das join einfach nich.
|
|
|
|
 |
Account gelöscht
Ort: -
Alter: -
|
Verfasst Di 22.11.2005 19:05
Titel
|
 |
|
nur zum basteln: kann ich ein stück von den tabellen haben zum rumprobieren?
Zuletzt bearbeitet von am Di 22.11.2005 19:05, insgesamt 1-mal bearbeitet
|
|
|
|
 |
gtz
Threadersteller
Dabei seit: 15.04.2002
Ort: -
Alter: 48
Geschlecht:
|
Verfasst Di 22.11.2005 19:48
Titel
|
 |
|
XSchinkenX hat geschrieben: | nur zum basteln: kann ich ein stück von den tabellen haben zum rumprobieren? |
wieviel hättste denn gerne?
|
|
|
|
 |
Account gelöscht
Ort: -
Alter: -
|
Verfasst Di 22.11.2005 20:21
Titel
|
 |
|
Juchu:
Code: |
SELECT txt.text "erg", pruef.text "pruefErg"
FROM referenzen ref
LEFT JOIN texte txt ON txt.refId = ref.id
LEFT JOIN texte pruef ON pruef.langId = {$deineLangId} AND pruef.refId = {$deineRefId}
WHERE ref.id = {$deineRefId}
AND txt.langId = IF(
pruef.text IS NOT NULL, {$deineLangId}, {$defaultLangId}
) |
manmanman... wohl ein wenig doppeltgemoppelt.
hier noch die dummytabellen, das kannste dir ja dann da rausklauben.
Code: | -- phpMyAdmin SQL Dump
-- version 2.6.4-pl1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Erstellungszeit: 22. November 2005 um 20:26
-- Server Version: 4.1.14
-- PHP-Version: 5.0.5
--
-- Datenbank: `sprache_test`
--
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `referenzen`
--
DROP TABLE IF EXISTS `referenzen`;
CREATE TABLE IF NOT EXISTS `referenzen` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
--
-- Daten für Tabelle `referenzen`
--
INSERT INTO `referenzen` VALUES (1, 'name1');
INSERT INTO `referenzen` VALUES (2, 'keinTextDa');
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `texte`
--
DROP TABLE IF EXISTS `texte`;
CREATE TABLE IF NOT EXISTS `texte` (
`id` int(10) unsigned NOT NULL auto_increment,
`text` varchar(255) NOT NULL default '',
`refId` int(11) NOT NULL default '0',
`langId` int(11) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
--
-- Daten für Tabelle `texte`
--
INSERT INTO `texte` VALUES (1, 'sprache_default', 1, 0);
INSERT INTO `texte` VALUES (2, 'sprache 1', 1, 1);
INSERT INTO `texte` VALUES (3, 'sprache2', 1, 2);
|
Zuletzt bearbeitet von am Di 22.11.2005 20:25, insgesamt 2-mal bearbeitet
|
|
|
|
 |
|
|
 |
Ähnliche Themen |
[MySql]Lost connection to MySQL server during query
MySQL - Reg. Expressions im Query
[MySQL] SQL Query Frage
[PHP]Problem mit MySQL-Query
mysql-Query gesucht
[MySql]Problem mit Syntax in Query
|
 |