Vereinfachung von SELECT abfrage

Vereinfachung von SELECT abfrage

am 04.05.2005 16:48:42 von dshome

Halllo

Ich fange an einiges in PHP zu lernen und will eine kleine Suche in einer
MySQL Datenbank machen. Mein Script funktioniert, nur kommt mir die Select
Abfrage sehr lang vor.
///Beispiel
$sqlbef = "SELECT * FROM m_db WHERE d1id =" .$_GET['id'] ." OR d2id ="
..$_GET['id'] ." OR d3id =" .$_GET['id'] ." OR d4id =" .$_GET['id'] ." OR
d5id =" .$_GET['id'] ." OR d6id =" .$_GET['id'] ." OR d7id =" .$_GET['id']
.." OR d8id =" .$_GET['id'] ." OR d9id =" .$_GET['id'] ." OR dCardid ="
..$_GET['id'] ." OR m1id =" .$_GET['id'] ." OR m2id =" .$_GET['id'] ." OR
m3id =" .$_GET['id'];
$sqlerg = mysql_query($sqlbef,$db);
\\\Beispiel Ende
Kann man die Select Abfrage kürzen oder vereinfachen? Die d1id bis d9id und
m1id bis m3id hatte ich gedacht, kann man einfach d%id und m%id benutzen.
Das fuhrte zu Fehlermeldungen. Kann man ganze Datensätze auch einfacher
durchsuchen? Bitte gebt mir Tips oder ein Link zum Manual, wo ich näheres
erfahre.

bye Dirk Schulze

Re: Vereinfachung von SELECT abfrage

am 04.05.2005 21:28:34 von Niels Braczek

Dirk Schulze schrieb:

> Ich fange an einiges in PHP zu lernen und will eine kleine Suche in einer
> MySQL Datenbank machen. Mein Script funktioniert, nur kommt mir die Select
> Abfrage sehr lang vor.
> ///Beispiel
> $sqlbef = "SELECT * FROM m_db WHERE d1id =" .$_GET['id'] ." OR d2id ="
> .$_GET['id'] ." OR d3id =" .$_GET['id'] ." OR d4id =" .$_GET['id'] ." OR
> d5id =" .$_GET['id'] ." OR d6id =" .$_GET['id'] ." OR d7id =" .$_GET['id']
> ." OR d8id =" .$_GET['id'] ." OR d9id =" .$_GET['id'] ." OR dCardid ="
> .$_GET['id'] ." OR m1id =" .$_GET['id'] ." OR m2id =" .$_GET['id'] ." OR
> m3id =" .$_GET['id'];
> $sqlerg = mysql_query($sqlbef,$db);
> \\\Beispiel Ende

Dein Datenbank-Design ist völlig kaputt.

> Kann man die Select Abfrage kürzen oder vereinfachen? Die d1id bis d9id und
> m1id bis m3id hatte ich gedacht, kann man einfach d%id und m%id benutzen.
> Das fuhrte zu Fehlermeldungen. Kann man ganze Datensätze auch einfacher
> durchsuchen? Bitte gebt mir Tips oder ein Link zum Manual, wo ich näheres
> erfahre.

Google nach 'Normalisierung' in Verbindung mit Datenbanken.

MfG
Niels

Re: Vereinfachung von SELECT abfrage

am 05.05.2005 10:44:05 von dshome

>
> Dein Datenbank-Design ist völlig kaputt.
>
Das ist nicht meine Datenbank, ich benutze die nur. Die DB ist von einem
Online-Game. und sieht noch schlimmer aus.
///Beispiel die Tabelle
CREATE TABLE `mob_db` (
`ID` mediumint(9) NOT NULL default '0',
`Name` text NOT NULL,
`Name2` text NOT NULL,
`LV` smallint(6) NOT NULL default '0',
`HP` mediumint(9) NOT NULL default '0',
`SP` mediumint(9) NOT NULL default '0',
`EXP` mediumint(9) NOT NULL default '0',
`JEXP` mediumint(9) NOT NULL default '0',
`Range1` tinyint(4) NOT NULL default '0',
`ATK1` smallint(6) NOT NULL default '0',
`ATK2` smallint(6) NOT NULL default '0',
`DEF` smallint(6) NOT NULL default '0',
`MDEF` smallint(6) NOT NULL default '0',
`STR` tinyint(4) unsigned NOT NULL default '0',
`AGI` tinyint(4) unsigned NOT NULL default '0',
`VIT` tinyint(4) unsigned NOT NULL default '0',
`INT` tinyint(4) unsigned NOT NULL default '0',
`DEX` tinyint(4) unsigned NOT NULL default '0',
`LUK` tinyint(4) unsigned NOT NULL default '0',
`Range2` tinyint(4) NOT NULL default '0',
`Range3` tinyint(4) NOT NULL default '0',
`Scale` tinyint(4) NOT NULL default '0',
`Race` tinyint(4) NOT NULL default '0',
`Element` tinyint(4) NOT NULL default '0',
`Mode` smallint(6) NOT NULL default '0',
`Speed` smallint(6) NOT NULL default '0',
`ADelay` smallint(6) NOT NULL default '0',
`aMotion` smallint(6) NOT NULL default '0',
`dMotion` smallint(6) NOT NULL default '0',
`Drop1id` mediumint(9) NOT NULL default '0',
`Drop1per` mediumint(9) NOT NULL default '0',
`Drop2id` mediumint(9) NOT NULL default '0',
`Drop2per` mediumint(9) NOT NULL default '0',
`Drop3id` mediumint(9) NOT NULL default '0',
`Drop3per` mediumint(9) NOT NULL default '0',
`Drop4id` mediumint(9) NOT NULL default '0',
`Drop4per` mediumint(9) NOT NULL default '0',
`Drop5id` mediumint(9) NOT NULL default '0',
`Drop5per` mediumint(9) NOT NULL default '0',
`Drop6id` mediumint(9) NOT NULL default '0',
`Drop6per` mediumint(9) NOT NULL default '0',
`Drop7id` mediumint(9) NOT NULL default '0',
`Drop7per` mediumint(9) NOT NULL default '0',
`Drop8id` mediumint(9) NOT NULL default '0',
`Drop8per` mediumint(9) NOT NULL default '0',
`Drop9id` mediumint(9) NOT NULL default '0',
`Drop9per` mediumint(9) NOT NULL default '0',
`DropCardid` mediumint(9) NOT NULL default '0',
`DropCardper` mediumint(9) NOT NULL default '0',
`MEXP` mediumint(9) NOT NULL default '0',
`ExpPer` mediumint(9) NOT NULL default '0',
`MVP1id` mediumint(9) NOT NULL default '0',
`MVP1per` mediumint(9) NOT NULL default '0',
`MVP2id` mediumint(9) NOT NULL default '0',
`MVP2per` mediumint(9) NOT NULL default '0',
`MVP3id` mediumint(9) NOT NULL default '0',
`MVP3per` mediumint(9) NOT NULL default '0'
) TYPE=MyISAM;
///Beispiel Ende


> Google nach 'Normalisierung' in Verbindung mit Datenbanken.
>

In den Meisten gefundenden Seiten wird beschrieben was Normalisierung ist,
aber nicht wie man die anwendet.

bye Dirk Schulze

Re: Vereinfachung von SELECT abfrage

am 05.05.2005 12:07:08 von Johannes Vogel

Hi Dirk

Dirk Schulze wrote:
> Ich fange an einiges in PHP zu lernen und will eine kleine Suche in einer
> MySQL Datenbank machen. Mein Script funktioniert, nur kommt mir die Select
> Abfrage sehr lang vor.
> ///Beispiel
> $sqlbef = "SELECT * FROM m_db WHERE d1id =" .$_GET['id'] ." OR d2id ="
> .$_GET['id'] ." OR d3id =" .$_GET['id'] ." OR d4id =" .$_GET['id'] ." OR
> d5id =" .$_GET['id'] ." OR d6id =" .$_GET['id'] ." OR d7id =" .$_GET['id']
> ." OR d8id =" .$_GET['id'] ." OR d9id =" .$_GET['id'] ." OR dCardid ="
> .$_GET['id'] ." OR m1id =" .$_GET['id'] ." OR m2id =" .$_GET['id'] ." OR
> m3id =" .$_GET['id'];
> $sqlerg = mysql_query($sqlbef,$db);
> \\\Beispiel Ende
> Kann man die Select Abfrage kürzen oder vereinfachen? Die d1id bis d9id und
> m1id bis m3id hatte ich gedacht, kann man einfach d%id und m%id benutzen.
> Das fuhrte zu Fehlermeldungen. Kann man ganze Datensätze auch einfacher
> durchsuchen? Bitte gebt mir Tips oder ein Link zum Manual, wo ich näheres
> erfahre.

Dass das Müll ist, weisst du ja bereits.

Du kannst die Zusammensetzung vereinfachen und damit im Code u.U. etwas
Übersicht gewinnen:

$sql = "select * from m_db where dCardid = ".$_GET['id'];
for ($i=1;$i<=9;$i++)
$sql.= " or d{$i}id = ".$_GET['id'];
for ($i=1;$i<=3;$i++)
$sql.= " or m{$i}id = ".$_GET['id'];

HTH, Johannes

Re: Vereinfachung von SELECT abfrage

am 05.05.2005 12:19:50 von dshome

"Johannes Vogel" schrieb im Newsbeitrag
news:d5cr8a$rtb$1@news.hispeed.ch...
> Hi Dirk
>
> Dirk Schulze wrote:
>> Ich fange an einiges in PHP zu lernen und will eine kleine Suche in einer
>> MySQL Datenbank machen. Mein Script funktioniert, nur kommt mir die
>> Select Abfrage sehr lang vor.
>> ///Beispiel
>> $sqlbef = "SELECT * FROM m_db WHERE d1id =" .$_GET['id'] ." OR d2id ="
>> .$_GET['id'] ." OR d3id =" .$_GET['id'] ." OR d4id =" .$_GET['id'] ." OR
>> d5id =" .$_GET['id'] ." OR d6id =" .$_GET['id'] ." OR d7id ="
>> .$_GET['id'] ." OR d8id =" .$_GET['id'] ." OR d9id =" .$_GET['id'] ." OR
>> dCardid =" .$_GET['id'] ." OR m1id =" .$_GET['id'] ." OR m2id ="
>> .$_GET['id'] ." OR m3id =" .$_GET['id'];
>> $sqlerg = mysql_query($sqlbef,$db);
>> \\\Beispiel Ende
>> Kann man die Select Abfrage kürzen oder vereinfachen? Die d1id bis d9id
>> und m1id bis m3id hatte ich gedacht, kann man einfach d%id und m%id
>> benutzen. Das fuhrte zu Fehlermeldungen. Kann man ganze Datensätze auch
>> einfacher durchsuchen? Bitte gebt mir Tips oder ein Link zum Manual, wo
>> ich näheres erfahre.
>
> Dass das Müll ist, weisst du ja bereits.
>
> Du kannst die Zusammensetzung vereinfachen und damit im Code u.U. etwas
> Übersicht gewinnen:
>
> $sql = "select * from m_db where dCardid = ".$_GET['id'];
> for ($i=1;$i<=9;$i++)
> $sql.= " or d{$i}id = ".$_GET['id'];
> for ($i=1;$i<=3;$i++)
> $sql.= " or m{$i}id = ".$_GET['id'];
>
Danke Johannes
An eine For Schleife in der SQL Syntax habe ich gar nicht gedacht. Das ist
ja PHP in verbindung mit SQL. Habe den SQL Befehl erst mit mysql.exe
getestet und ihn dan in das PHP Script gepackt.
bye Dirk Schulze

Re: Vereinfachung von SELECT abfrage

am 05.05.2005 15:43:55 von Niels Braczek

Dirk Schulze schrieb:

>>Dein Datenbank-Design ist völlig kaputt.
>
> Das ist nicht meine Datenbank, ich benutze die nur. Die DB ist von einem
> Online-Game. und sieht noch schlimmer aus.
> [Grausames Tabellenlayout]

Mein Beileid.

>>Google nach 'Normalisierung' in Verbindung mit Datenbanken.

> In den Meisten gefundenden Seiten wird beschrieben was Normalisierung ist,
> aber nicht wie man die anwendet.

Das ist auch nicht nötig, weil man auf normalisierte Tabellen ganz
einfach mit JOINs zugreifen kann. Die sind im Manual hinreichend
beschrieben. Für dein akutes Problem hast du ja einen brauchbaren
Lösungsvorschlag von Johannes bekommen.

MfG
Niels

Re: Vereinfachung von SELECT abfrage

am 06.05.2005 13:48:42 von unknown

Post removed (X-No-Archive: yes)