ugrás a tartalomhoz

Lekérdezés több tábláról a talált adatok függvényében

cupak1983 · 2010. Ápr. 29. (Cs), 01.34
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
 
1

Feladat

janoszen · 2010. Ápr. 29. (Cs), 09.28
Próbáld meg inkább leírni a feladatot mert így elég, ismeretlen táblaszerkezettel elég nehéz lesz Neked segítenünk.
2

Feladat leírása

cupak1983 · 2010. Ápr. 29. (Cs), 12.45
Szia!

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 :)
3

Így érthetőbb már a dolog. A

Ifju · 2010. Ápr. 29. (Cs), 16.18
Így érthetőbb már a dolog.

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:
SELECT k.nev, k.kompatib FROM asers_keszulek k, asers_products p
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.
4

Szörnyem :)

cupak1983 · 2010. Ápr. 29. (Cs), 16.56
Szia Ifju!

Köszönöm a segítségedet közben pont találtam működő megoldást:
<?
include("dbconn.php");
$szin = "white";
$parancs = "SELECT nev, kompatib FROM asers_keszulek inner join asers_products
on asers_products.`komp` like concat(\"%\",asers_keszulek.`kompatib`,\"%\")
where asers_products.`lid` = ".$_GET['lidi']."";

$eredmeny = mysql_query($parancs);
while ($sor = mysql_fetch_assoc($eredmeny)) {
    if ($szin=="lightgrey") {
       $szin = "white";
       }
     else {
       $szin = "lightgrey";
    }
?>


<UL>
<LI><FONT SIZE="2" COLOR="#000000"><?= $sor['nev'];?></FONT></LI>
</UL>

<?
}
?>
Van egy elég nagy bonyolultságú weboldalam, aminek a magját kóstolgatja ez a lekérdezés, már nem szívesen változtatok rajta, de meg fogom nézni a Te javaslatodat is :)

Még egyszer köszönöm a segítségedet.

Üdv.