- Honor 200 Pro - mobilportré
- Xiaomi 15 Ultra - kamera, telefon
- Na! Ez egy JÓ utólagos autós fejegység - Minix CP89-HD
- Samsung Galaxy S22 és S22+ - a kis vagány meg a bátyja
- Magisk
- Xiaomi 15 - kicsi telefon nagy energiával
- iPhone topik
- Eltűnhet a Dinamikus Sziget
- Xiaomi 14T Pro - teljes a család?
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
Új hozzászólás Aktív témák
-
Sk8erPeter
nagyúr
-
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? -
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.
-
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. -
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? -
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] -
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 )
) -
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] -
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 |
+----------+ -
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.) -
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ó
Új hozzászólás Aktív témák
Hirdetés
- Legion 5 16IRX9 16" QHD+ IPS i5-13450HX RTX 4060 16GB 512GB NVMe magyar vbill gar
- SK Hynix Platinum P41 2TB M.2 NVME PCI-E 4.0 x4 - Új - 7000-6500 MBs - Eladó!
- Verbatim Vi5000 2TB M.2 NVME PCI-E 4.0 x4 - Új, bontatlan - Eladó!
- Dell Latitude 7480, 14" FHD, I5-6300U CPU, 8GB DDR4, 256GB SSD, W11, 1 év garancia ( OLVASD VÉGIG)
- HP ProBook 440 G7, 14" HD, I5-10210U CPU, 8GB DDR4, 256GB SSD, W11, 1 év garancia ( OLVASD VÉGIG)
- DDR5 8/ 16/ 32GB 4800-5600MHz SODIMM laptop RAM, több db- számla, garancia
- BESZÁMÍTÁS! ASUS B450 R7 1700X 16GB DDR4 512GB SSD RX 580 8GB Rampage SHIVA Corsair 450W
- BESZÁMÍTÁS! ASUS ROG STRIX X570-E Gaming alaplap garanciával hibátlan működéssel
- AKCIÓ! Sapphire Nitro+ RX 6800 XT 16GB videokártya garanciával hibátlan működéssel
- Csere-Beszámítás! AMD Ryzen 7 9700X Processzor!
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged