ugrás a tartalomhoz

Tábla kiválasztás - hogyan

babem · 2006. Ápr. 7. (P), 11.08
Hello

Hogyan tudok több azonos felépitésü, de különbözö tartalmu táblák között váltani?
A "termek" tábla "menu01" oszlopában van a kiválasztando tábla neve.
Ezzel probálkozom, de nem müködik:

<?php
mysql_select_db($database_proba, $proba);
$query_termeklista = "SELECT * FROM termek";
$termeklista = mysql_query($query_termeklista, $proba) or die(mysql_error());
$row_termeklista = mysql_fetch_assoc($termeklista);
$totalRows_termeklista = mysql_num_rows($termeklista);

$menu = $row_termeklista['menu01'];

mysql_select_db($database_proba, $proba);
$query_termek_menu = "SELECT * FROM ".$menu;
Biztos szintaktikai a hiba de mi? Próbáltam global-ra tenni a $menu-t de ugy se jó.

Valaki megirná nekem az utolsó sort müködöképesre?
Köszike
babem
 
1

mi a kérdés?

Anonymous · 2006. Ápr. 7. (P), 11.50
itt egy kód, szintaktikai hiba nincs benne, de nem tudjuk milyen működést várnál tőle.

amit látok, az az, hogy csinálsz egy sql parancsot, amivel - majd egyszer - le tudod kérdezni a termek tábla első sorának menu01 oszlopában lévő névvel ellátott tábla tartalmát. ha ez a célod, akkor tökéletesen oldottad meg a feladatot.
ellenben ha nem ez a célod, akkor a $query_termek_menu-ben lévő parancsot nem árt futtatni. ;] előtte persze csinálhatsz egy

<?php
echo $query_termek_menu;
?>
parancsot, és akkor meglátod, mit alkottál.

a mysql_select_db() függvényt pedig elég egyszer meghívni, ha végig ugyanabban az adatbázisban akarsz dolgozni.

gex
2

De miért nem müködik mégse

babem · 2006. Ápr. 7. (P), 14.02
Ez az egész természetesen egy ciklusban lesz de ahogy te is irod az az elképzelés hogy a termék tábla menu01 oszlop tartalmazza azt a táblát amelyböl az információkat ki kell olvasni.
A második mysql_select_db()-t kiszedtem köszi.
Tehát a lényeg hogy van egy termék aminek több tipusa létezik arra gondoltam hogy (mivel nem tudni hogy a terméknek hány tipusa van) külön táblában lenne felsorolva a terméktipus és a terméktáblában csak egy hivatkozás oszlop van (menu01) ami erre a táblára mutat. Igy a termék képe mellett egy hozzá kapcsolódó menüt tudnék felépiteni ahonnan az adott termékalkategoria tábláira lehet ugrani. Igy nem jelenthet problémát hogy melyik terméknek hány altipusa van, lehet egy is de lehet 25 is.
Kezdöként erre a táblakiválasztásos modszerre gondoltam, de ha van jobb ötlet, vevö vagyok rá.
üdv:
babem
3

sok tábla helyett egy

Anonymous · 2006. Ápr. 7. (P), 14.32
bonyolult lesz egy idő után kezelgetni ezt a sok típus táblát. csináljunk helyette egyet. tehát legyen egy termék és egy típus tábla:
termek
 - termek_id
 - termek_nev

tipus
 - tipus_is
 - termek_id
 - tipus_nev


ezt sokkal könnyebb használni, és nem fogsz később a sok tábla miatt szenvedni /pl ha keresést akarsz csinálni/.

gex
4

gondoltam rá

babem · 2006. Ápr. 7. (P), 15.35
Igen, gondoltam erre, de igy nem tudom számszerint megállapitani hogy egy adott termékböl hány sor van a tipus táblában, gondolom van erre valami praktikus lekérdezés ami egy számot ad vissza ami kell a ciklushoz. Tudsz ilyet? :-)
köszi
babem
5

szvsz

erenon · 2006. Ápr. 7. (P), 16.04
szerintem hasznosítható a mysql_fetch_array függvény egy while ciklussal.
8

tudok

Anonymous · 2006. Ápr. 10. (H), 08.36
először próbáljuk meg az összes termékhez lekérni a hozzá kapcsolódó típusok számát:

select
  termek_id, termek, count(tipus_id)
from
  termek
  left join tipus using(termek_id)
group by
  termek_id
ez visszaadja neked az összes termék azonosítótját és nevét a hozzá kapcsolódó típusok számával. ha egyetlen termékre akarod ezt lekérdezni, akkor itt is evidens lenne az, hogy a végére dobsz egy where termek_id=x feltételt, de itt is elég lesz csak a típus táblából kérdezni, ha a termék táblából nincs szükséged semmire:

select
  count(tipus_id)
from
  tipus
where
  termek_id=x
gex
6

Nem szür a lekérdezés

babem · 2006. Ápr. 9. (V), 17.46
Tehát megcsináltam az ajánlásod alapján a két táblát, feltöltöttem öket és megcsináltam egy szürt lekérdezést, de nem müködik:
SELECT * FROM tipus, termek
 WHERE tipus.termek_id = termek.termek_id
Erre kéne megkapnom egy olyan listát amelyben csak egy adott termékhez tartozó adatok vannak. Ehelyett egy összevont listát kapok, azt is duplán. Ha kihagyom a termek táblát a FROM után, akkor meg azt irja, hogy a termek nem létezö tábla.
segitesz rajtam?
babem
7

szűr, ha van feltétel

Anonymous · 2006. Ápr. 10. (H), 08.29
tulajdonképpen semmilyen feltételt nem adtál meg ezért jeleníti meg az összes sort.

select
  *
from
  termek
  left join tipus using(termek_id)
ez megjeleníti az összes terméket az összes hozzá kapcsolódó típussal.
ha ezt egyetlen termék típusaira akarod leszűkíteni, akkor egyszerűen a végére csaphatnál egy where termek_id=x sort, ahol x az adott terméket jelenti, de nyilvánvalóan elég ha csak és kizárólag a tipus táblából kérdezed le azokat

select
  *
from
  tipus
where
  termek_id=x
formában.

gex
9

Sajna még mindig nem megy

babem · 2006. Ápr. 10. (H), 10.55
Kb igy szeretném megjeleniteni a termékeket:
Táblák:
termék
termék_id/termékfajta/picture
terméktipus
tipus_id/termék_id/tipusnév

Megjelenitendő

- Tranzisztorok
---BA tipus
---BC tipus
---BD tipus
---BE tipus

-Kondenzátorok
---Kerámia tipus
---Elektrolit tipus
---Tantál tipus
.... stb.

Tehát nekem van egy külső ciklusom, ahol a termékfajták nevei íródnának ki, majd azon belül egy belső ciklus az adott termékhez tartozó fajtát sorolná fel.
Addig jutottam el, hogy a termékfajták táblái szépen bejönnek, megjelenik a cimük is, de a táblán belül az összes terméktipus előjön.
10

ciklus

Anonymous · 2006. Ápr. 10. (H), 14.43
azért, mert egy ciklus dolgozza fel az adatokat, nem kell ciklusonként újra az adatbázishoz fordulni. egyszer kérd le az adatokat és utána dolgozd fel.
Addig jutottam el, hogy a termékfajták táblái szépen bejönnek, megjelenik a cimük is, de a táblán belül az összes terméktipus előjön.

egyrészt a termékfajtáknak milyen táblái vannak? másrészt miért baj az, hogy előjön az összes terméktípus? nem ezt szeretnéd?

gex
11

összes tipus nem kell

babem · 2006. Ápr. 10. (H), 15.31
Az alatt értem az összes tipust hogy a tranzisztorok alá felsorolódnak a kondenzátortipusok is és a kondenzátorok alá meg a tranzisztortipusok is.

babem
12

olvasd el újra az egészet

Anonymous · 2006. Ápr. 10. (H), 16.00
azt hiszem nem figyeltél. a

select
  *
from
  tipus
where
  termek_id=x
lekérdezésben az x helyére az adott termék azonosítóját beírva nem létezik, hogy az összes típust visszaadja...

gex