Lekérdezés több tábláról a talált adatok függvényében
Sziasztok!
Kicsit elakadtam, remélem valaki segít kimászni a kátyuból :) Nem vagyok profi phps, de idáig sikerült összeraknom mindent amit szerettem volna, ez a dolog viszont megviccel mindenképpen. Van egy kód, az alábbi:
<?
$parancs = "SELECT nev, kompatib FROM asers_keszulek WHERE `kompatib` IN (SELECT `komp` FROM asers_products WHERE `lid` = ".$_GET['lidi'].")";
$eredmeny = mysql_query($parancs);
$nev = $sor['nev'];
$kompatib = $sor['kompatib'];
while ($sor = mysql_fetch_array($eredmeny)) {
if ($szin=="lightgrey") {
$szin = "white";
}
else {
$szin = "lightgrey";
}
?>
<UL>
<LI><FONT SIZE="2" COLOR="#000000"><?= $nev = $sor['nev'];?></FONT></LI>
</UL>
<?
}
?>
Ennek az lenne a feladata, hogy az első lekérdezésben megállapítson egy bizonyos rekordot ami egy másik rekord alapján meg is történik, tehát a dolog eleje elvileg stimmel.
A második lekérdezésben az első kérdésből nyert rekord tartalmát szeretném megkerestetni bizonyos cellában és amennyiben a lekérdezés eredménnyel jár, abban az esetben szeretném kiíratni az adott tábla egy rekordját, ha a lekérdezésnek nincs eredménye akkor természetesen nem szeretnék kiírni semmit.
Lehet, hogy kicsit kuszán fogalmaztam, elnézést mindenkitől.
Az alábbi eredményre jutottam:
1. eset, ha a második lekérdezésnek csak 1 eredménye van akkor lefut és ki tudom íratni a találatot
2. eset, ha a lekérdezésnek több eredménye lenne, akkor nem ír ki semmit a böngésző.
Tudtok segíteni abban hogy mit rontok el? Nagy hiba nem lehet, gondolom én mert akkor egyáltalán nem működne.
Köszönöm
■ Kicsit elakadtam, remélem valaki segít kimászni a kátyuból :) Nem vagyok profi phps, de idáig sikerült összeraknom mindent amit szerettem volna, ez a dolog viszont megviccel mindenképpen. Van egy kód, az alábbi:
<?
$parancs = "SELECT nev, kompatib FROM asers_keszulek WHERE `kompatib` IN (SELECT `komp` FROM asers_products WHERE `lid` = ".$_GET['lidi'].")";
$eredmeny = mysql_query($parancs);
$nev = $sor['nev'];
$kompatib = $sor['kompatib'];
while ($sor = mysql_fetch_array($eredmeny)) {
if ($szin=="lightgrey") {
$szin = "white";
}
else {
$szin = "lightgrey";
}
?>
<UL>
<LI><FONT SIZE="2" COLOR="#000000"><?= $nev = $sor['nev'];?></FONT></LI>
</UL>
<?
}
?>
Ennek az lenne a feladata, hogy az első lekérdezésben megállapítson egy bizonyos rekordot ami egy másik rekord alapján meg is történik, tehát a dolog eleje elvileg stimmel.
A második lekérdezésben az első kérdésből nyert rekord tartalmát szeretném megkerestetni bizonyos cellában és amennyiben a lekérdezés eredménnyel jár, abban az esetben szeretném kiíratni az adott tábla egy rekordját, ha a lekérdezésnek nincs eredménye akkor természetesen nem szeretnék kiírni semmit.
Lehet, hogy kicsit kuszán fogalmaztam, elnézést mindenkitől.
Az alábbi eredményre jutottam:
1. eset, ha a második lekérdezésnek csak 1 eredménye van akkor lefut és ki tudom íratni a találatot
2. eset, ha a lekérdezésnek több eredménye lenne, akkor nem ír ki semmit a böngésző.
Tudtok segíteni abban hogy mit rontok el? Nagy hiba nem lehet, gondolom én mert akkor egyáltalán nem működne.
Köszönöm
Feladat
Feladat leírása
Próbálom egy egyszerű példán leírni mit szeretnék:) A feladat az lenne, hogy van két tábla:
1. tábla
sorszám, névA, tulajdonságok
1 A 1,2,3
2 B 1
2. tábla
id, névB, típuskód
1 alma 1
2 körte 2
3 dinnye 3
Arra szeretnék egy lekérdezést csinálni, hogy az 1. tábla egy bizonyos sorszámú elemének a tulajdonságok részében mik azok a típuskódok amik megtalálhatóak, ha ez meg van, akkor ez alapján szeretném kilistáztatni, hogy milyen névB szerepel a tulajdonságok között.
pl:
ha tulajdonságok 1, akkor írjuk ki, hogy alma
ha tulajdnoságok 1,3 akkor írjuk ki, hogy alma, dinnye
Köszönöm a segítségedet :)
Így érthetőbb már a dolog. A
A "típuskód IN (SELECT tulajdonságok FROM ...)" feltétel miatt nem kapsz visszatérési értéket akkor, ha a tulajdonságok mezőben vesszővel elválasztva tárolsz értékeket, és nem csak egy érték van benne. Ez nem php probléma, hanem sql.
Amit te akarsz azt egy crosstable query-vel és megfelelő WHERE feltételekkel meg lehet oldani, de eléggé szörnyszülött lenne az eredmény.
Pl:
WHERE p.`lid` = ".$_GET['lidi']."
AND
(
k.`kompatib` = p.`komp` // ha egyezik a ket mezo tartalma ez igaz //
OR
LOCATE(CONCAT(k.`kompatib`,','), p.`komp`)=1 // ha az asers_keszulek.kompatib értéke az első az asers_products.komp mezőben, akkor ez igaz //
OR
(
AND LOCATE(CONCAT(k.`kompatib`,','), p.`komp`) > LOCATE(',', p.`komp`) // ha az asers_keszulek.kompatib értéke benne van az asers_products.komp mezőben, de nem az első érték, akkor ez igaz //
)
)
Én inkább javasolnám azt, hogy tervezd át az adatstruktúrát, és tárold a `komp` mező adatait külön rekordokban, egy másik táblában, amit JOINNAL le tudsz kérdezni egyszerűen és gyorsan.
A klienstől fogadott adatokat pedig escapeld mindenféleképpen, hogy elkerüld az sql-injection sebezhetőséget.
Szörnyem :)
Köszönöm a segítségedet közben pont találtam működő megoldást:
Még egyszer köszönöm a segítségedet.
Üdv.