Hirdetés
Ú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ítani
SELECT 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
- exHWSW - Értünk mindenhez IS
- gban: Ingyen kellene, de tegnapra
- Milyen házat vegyek?
- Genshin Impact (PC, PS4, Android, iOS)
- Elektromos autók - motorok
- Lakáshitel, lakásvásárlás
- Nintendo Switch
- PlayStation 5
- Konzolokról KULTURÁLT módon
- Motorola Edge 50 Neo - az egyensúly gyengesége
- További aktív témák...
- DELL Latitude 5495 (AMD Ryzen 5 PRO / 16GB DDR4 / AMD VEGA 8 / 256GB / Windows 11)
- DELL VOSTRO 3490 (Core i5--10210U / 16GB / 256GB / 14"FHD / HUN BILL/ Win11) 27% ÁFA
- Xiaomi Redmi Note 13 8/256GB fekete garanciával
- Xiaomi 15T Pro 12/512gb - Makulátlan, Euronics számla, garancia, akár beszámítással
- iPhone 15 Pro Max Spacegray 100% akkumulátorral!
- ÁRGARANCIA!Épített KomPhone Ryzen 5 5600X 16/32/64GB RAM RX 7600 8GB GAMER PC termékbeszámítással
- 152 - Lenovo LOQ (15IRH8) - Intel Core i5-12450H, RTX 4060
- Xiaomi Redmi Note 14 Pro 5G 256GB, Kártyafüggetlen, 1 Év Garanciával
- BESZÁMÍTÁS! ASRock B450 R5 5600X 16GB DDR4 512GB SSD RTX 3060 12GB Zalman Z1 Plus Cooler Master 750W
- LG 49WQ95X-W - 49" NANO IPS - 5120x1440 Dual QHD - 144Hz - USB Type-C - HDR 400 - G-Sync - FreeSync
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest







