ugrás a tartalomhoz

Cellaérték-egyeztetés több táblás lekérdezésnél

Creative · 2010. Aug. 3. (K), 17.54
Üdv!

A következőt szeretném:
- adott 2 adattábla
- a 2 tábla 2-2 celláját szeretném csak lekérdezni
- a cellák tartalmának meg kell egyezni, különben nincs lekérdezési érték
Másolom, hogy állok s lesem, miért nem akar működni, ami máshol működik

$mysql->query("select
menu.title, menu.atitle, static.title, static.pagetitle, categories.id
from menu, static, categories
where menu.title = static.title	or
where menu.atitle = static.pagetitle
");	
Ehhez szeretnék még plussz egy táblából lekérdezést adni, de amíg nem orvoslom ezt, addig nincs update se :( Várom a hozzáértő észrevételeket ^^

C.
 
1

Talán sokalja a kettő darab

kuka · 2010. Aug. 3. (K), 18.16
Talán sokalja a kettő darab where-t.
2

updates

Creative · 2010. Aug. 5. (Cs), 13.40
Jó, a copy+paste miatt ott maradt :)
Azóta tovább dolgoztam rajta, úgyhogy íme a mai keresztrejtvényem =) Azt szeretném elérni, hogy az IF-es megfeleltetés eredményét vizsgálva fusson le a megfelelő lekérdezés.

$basic = "SELECT menu.title, static.title,
IF(lower(menu.title)=lower(static.title), 1, 0) as OK
FROM menu, static";
$result = mysql_query($basic);

if($result["OK"] == 1) {
 $mysql->query("SELECT id, name FROM categories
 WHERE cat_group_id = '".$modules["static"]["static_category"]."'
 ");
}
if($result["OK"] == 0) {
 $mysql->query("SELECT id, nev FROM csatorna
 WHERE id = '".$modules["cikk"]["cikk_csatornaid"]."'
 ");
}
3

$result =

kuka · 2010. Aug. 6. (P), 08.44
$result = mysql_query($basic);

if($result["OK"] == 1) {
$result egy resource, te pedig tömbként kezeled. Nézz rá a mysql_fetch_array() függvényre a PHP dokumentációban.
4

szedjük össze!

tiku I tikaszvince · 2010. Aug. 6. (P), 09.15
Nem kötekedésként, de már 4 tábláról van szó (menu, static, categories, csatorna). Nem tudunk semmit a szerkezetükről, sem arról, hogy szerinted milyen kapcsolatban vannak egymással. Nem tudjuk, milyen adatokat szeretnél kinyerni, és milyen feltételek szerint. Szerintem így marha nehéz lehet lekérdezést írni. Ha megosztod velünk ezeket az információkat, biztosan tudunk majd valami konkrét tanácsot adni.
5

done

Creative · 2010. Aug. 13. (P), 12.24
Oké... időközben rájöttem, helytelenül fogalmaztam.
Végülis a megoldásom ez lett:
1 - alap lekérést futtatom, melyben használok egy

IF(lower(menu.title)=lower(static.title), 1, 0) as OK
megfeleltetést, és $id alapján limitálom 1-re a visszaadandó sorokat.
2 - switch -es megoldással ha $row['OK'] 1, lefut az egyik lekérdezésem, ha pedig 0, a másik

Na most nem szeretnék új témát nyitni egy ehhez kapcsolódó frissítés miatt :$
Mivel az érintett adattáblákban pl az Ő,ő,Ű,ű ASCII -kddal van megadva, a lekérdezéskor nem képes értelmezni azokat a cellákat, ahol ez felmerül. Ergo MySQL Query -be kell tennem egy olyan részt, ami ezt orvosolja.
Erre a következőt találtam ki, készítek egy function()-t, amit viszont gőzöm sincs hogy hívok be :S Mert akárhogy próbáltam a már meglévő Querykbe berakni, nem ad át értéket a PHP-nak, ergo nem tud mit feldolgozni s kiírni nekem.
Így néz ki a cserélőm(tesztelve):
DROP FUNCTION IF EXISTS `cserel`;
CREATE FUNCTION  `cserel` (s VARCHAR(250))
RETURNS VARCHAR(250) CHARSET utf8
RETURN lower(
replace(
replace(
replace(replace(s,'ő','ő')
,'Ő','Ő')
,'ű','&#369')
,'Ű','&#219'));													
A lekérés, amibe pedig bekéne raknom, ez:
SELECT menu.id, menu.title, cikk.id, cikk.cim, csatorna.nev AS csa_torna
FROM menu, cikk
LEFT JOIN csatorna ON cikk.csatornaid = csatorna.id
WHERE lower(menu.title)=lower(cikk.cim)
AND menu.id = SZÁM
A menu.id helyén php változó áll, ezt most kiszedtem kódmásoláskor.ó, azért a SZÁM áll ott :)) Valakinek ötlete, hogy lenne működőképes vele?

Előre is köszönöm a válaszokat :)

C.
6

Imma stupid...

Creative · 2010. Aug. 16. (H), 11.35
Üdv

Nos megoldódott a problematikám. De hogy mások is okulhassanak, ha esetleg hasonló gondjuk lenne, és mivel a tudás megosztása nem lehetőség... :) Íme a végleges lekérdezési formám:
"SELECT menu.title, static.title,
IF(cserel(menu.title)=cserel(static.title), 1, 0) as OK
FROM menu, static
WHERE menu.id = ".$id;
...
WHERE static.category = categories.id
AND cserel(menu.title)=cserel(static.title)
Ennyi.. okultam énis, remélem máson is segítettem ^^

C.