Új hozzászólás Aktív témák
-
Jester01
veterán
válasz vakondka #246 üzenetére
Pl. saját magával összejoinolod a táblát, vhogy így:
select t1.products_id, t1.language_id from products_description t1 left join products_description t2 on t1.products_id = t2.products_id and t2.language_id = 4 and t1.language_id = 1 where t2.language_id is null
Most éppen nem jutok be mysqles gépre de talán jóJester
-
Jester01
veterán
válasz vakondka #250 üzenetére
Itt a javított verzió, most van mysqlem ki is tudtam próbálni:
select t1.products_id, t1.language_id from products_description t1 left join products_description t2 on t1.products_id = t2.products_id and t2.language_id = 4 where t1.language_id = 1 and t2.language_id is null
(A t1.language_id = 1 feltétel a join helyett a where részbe kell.)Jester
-
Jester01
veterán
válasz vakondka #252 üzenetére
Jah, most meg fordítva van (azokat listázta amik angolul vannak csak)
A 4est és az 1est cseréld meg.
select count(*) from products_description t1 left join products_description t2 on t1.products_id = t2.products_id and t2.language_id = 1 where t1.language_id = 4 and t2.language_id is null;
+----------+
| count(*) |
+----------+
| 1618 |
+----------+Jester
-
RedAnt
aktív tag
válasz vakondka #340 üzenetére
Azzal semmi baj nincs, ld. [link] - SQL-92 szabvány, mysql támogatja.
emitter: ilyen hiba akkor van, amikor egy utf-8-ban kódolt 'é' karaktert iso-8859-1-ként próbálnak értelmezni, de ha a phpmyadmin és a böngésződ is utf-8-ra van állítva, akkor passz... Esetleg ellenőrizd, milyen content-type headert kapsz.
[Szerkesztve]╚╦╦╦
-
vakondka
őstag
válasz vakondka #636 üzenetére
Sikerült megtalálni a megoldást!
Gondoltam leírom, hátha valaki másnak is szüksége lesz rá egyszer.
Szóval a kiindulási helyzet, hogy az SQL parancsok nem képesek hibátlanul elvégezni stringek összehasonlítását, amennyiben az egyik string értéke NULL.
De van egy utasítás, ami képes úgy átalakítani a NULL értéket, hogy ezután az összehasonlítás helyes legyen: CONCAT_WS
Ez végül is sztringek összefűzésére való, de az én példámnál maradva látszik,
hogy az összefűző karakter egy olyan string ami nem tartalmaz egy karaktert sem és összefűzöm az adott mező értékével ami akár null is lehet, mert ha a NULL-t összefűzzük a semmivel, akkor az már nem NULL, vagyis össze lehet hasonlítaniSELECT p.products_model, p.products_price, pd.products_name, pd.products_description, pdo.products_description AS old_description, pd.language_id, p.products_last_modified
FROM products p, products_description pd, products_description_old AS pdo
WHERE pdo.products_id = pd.products_id
AND p.products_id = pd.products_id
AND pd.language_id = pdo.language_id
AND (
CONCAT_WS( '', pd.products_description ) != CONCAT_WS( '', pdo.products_description )
)https://toptarget.hu - Online Marketing Ügynökség
-
Lortech
addikt
válasz vakondka #637 üzenetére
Pedig nem hibás a stringek összehasonlítása, de nem árt tisztában lenni az operátorok definíciójával. Ha nincs kikötve a tábla definícióban, hogy az adott mező nem lehet null, akkor figyelembe kell venni, hogy a mezőt operandusként felhasználva, ha az null, milyen eredmények születhetnek. Más RDBMS-eknél is (Oracle-nél biztos) oda kell figyelni a null-okra, különben alattomos bugokat lehet bevinni.
Ha a ténylegesen NULL értéket és az üres stringet funkcionális szempontból egyenlőnek tekintheted (vagy kell tekintened), akkor a megoldásod működik, egyébként technikailag nem ugyanaz a kettő, és alkalmazástól függ, hogy külön kezelendő-e, az üres string plusz információ a NULL-hoz képest.
Van a mysql-nek NULL-safe equal operátora, a <=>, aminek a definícióját megnézheted itt:
[link].
Ez az egyik egy megoldás lehet, az előző bekezdés függvényében, a másik meg a concat helyett inkább az IFNULL függvény. [link][ Szerkesztve ]
Thank you to god for making me an atheist
-
Lortech
addikt
válasz vakondka #643 üzenetére
Elnézést a szemétkedésért, nem kellett volna 6 sör után felnéznem a fórumra.
Viszont szerintem elég korrekt segítséget adtam, a konkrét megoldást nem szeretem beírkálni.
Akkor az előző hsz. helyesen így szólt volna: ha az operátornak nincsen tagadása, akkor miért ne tagadhatnád le a logikai kifejezést egy AND NOT-tal például?Thank you to god for making me an atheist
-
Sk8erPeter
nagyúr
válasz vakondka #769 üzenetére
Hali!
Szerintem legegyszerűbb megoldás INNER JOIN-olni újból ugyanazzal a táblával, az alábbi lekérdezést teszteltem is, nálam 0.0015 másodperc alatt lefutott:
SELECT
pr.`products_id`, pr.`products_model`, pr.`products_price`,
pdesc_1.`products_name`, pdesc_4.`products_name`, pdesc_5.`products_name`
FROM
`products` AS pr
INNER JOIN
`products_description` AS pdesc_1
ON pr.`products_id` = pdesc_1.`products_id`
AND pdesc_1.`language_id` = 1
INNER JOIN
`products_description` AS pdesc_4
ON pr.`products_id` = pdesc_4.`products_id`
AND pdesc_4.`language_id` = 4
INNER JOIN
`products_description` AS pdesc_5
ON pr.`products_id` = pdesc_5.`products_id`
AND pdesc_5.`language_id` = 5Itt a táblák neveit a JOIN-nál direkt úgy neveztem el, hogy beszédes legyen, tehát ha pl. a 4-es language id-vel JOIN-oltam, akkor pdesc_4 lett a JOIN-olt tábla neve.
Remélem erre gondoltál.Sk8erPeter
-
PazsitZ
addikt
válasz vakondka #769 üzenetére
Elsőre ez ugrik be:
SELECT products_id, products_model, products_price, pd1.products_name, pd2.products_name, pd3.products_name
FROM products
LEFT JOIN products_description pd1 ON pd1.product_id = products.product_id AND language_id = 1
LEFT JOIN products_description pd2 ON pd2.product_id = products.product_id AND language_id = 2
LEFT JOIN products_description pd3 ON pd3.product_id = products.product_id AND language_id = 3;De biztos van szebb megoldás is, mondjuk PROCEDURE-t használva.
mod: Lemaradtam.
[ Szerkesztve ]
- http://pazsitz.hu -
-
Sk8erPeter
nagyúr
válasz vakondka #772 üzenetére
Szívesen, örülök, hogy segítettem.
Amúgy még annyi kimaradt, hogy a SELECT melletti felsorolásnál persze ne felejts el majd egyedi nevet adni a `products_name` mezőknek, hogy egyértelműen le tudd majd kérdezni mondjuk PHP-vel. (csak példa: pdesc_4.`products_name` AS products_name_4)======
(#771) PazsitZ :
nekem most nem jut eszembe jobb/gyorsabb megoldás tárolt eljárással sem.
Mire gondolsz?[ Szerkesztve ]
Sk8erPeter
Új hozzászólás Aktív témák
Állásajánlatok
Cég: Ozeki Kft.
Város: Debrecen