PHP vs. SQL
2009-08-31T17:17:26+02:00
2009-09-23T20:42:14+02:00
2022-07-19T05:02:29+02:00
  • Sziasztok!


    Nekem egy kis segítségre lenne szükségem.

    Egy MSQL adatbázisból szeretnék adatokat kinyerni PHP-vel egy weboldalra.

    A szolgáltató a freeweb.hu

    A PHP kód:

    <?php
    // Connects to your Database

    mysql_connect("sql", "huuha", "36766b8afc") or die(mysql_error());

    mysql_select_db("huuha") or die(mysql_error());

    $data = mysql_query("SELECT * FROM proba") or die(mysql_error());

    Print "<table border cellpadding=3>";

    while($info = mysql_fetch_array( $data ))
    {
    Print "<tr>";
    Print "<th>Code:</th> <td>".$info['code'] . "</td> ";
    Print "<th>Name:</th> <td>".$info['nev'] . "</td> ";
    Print "<th>Pet:</th> <td>".$info['valami'] . " </td></tr>";
    }

    Print "</table>";
    ?>


    És amit kiad a weboldalon:

    "; while($info = mysql_fetch_array( $data )) { Print ""; Print "Code: ".$info['code'] . " "; Print "Name: ".$info['nev'] . " "; Print "Pet: ".$info['valami'] . " "; } Print ""; ?>


    Nem tudok rájönni mi lehet a gond.

    Előre is köszi!
    Mutasd a teljes hozzászólást!
  • Jogos.
    Mutasd a teljes hozzászólást!
  • must be defined as a key

    csak key, nem primary key.

    Ez pl. tökéletesen működik:

    CREATE TABLE `teszt` (
    `a` INT NOT NULL AUTO_INCREMENT ,
    `b` VARCHAR( 10 ) NOT NULL ,
    PRIMARY KEY ( `b`) ,
    INDEX ( `a` )
    ) ENGINE = MYISAM
    Mutasd a teljes hozzászólást!
  • Ha "kézzel" kapcsolod, akkor bármilyen mező is lehet. (Amelyik adatbáziskezelőben van hivatkozás integritás, vagy kaszkádolás, ott már általában primary kulcsnak kell lennie a kapcsolat ilyen jellegéhez)

    Ha jól értettem, akkor te ilyesmit szeretnél:
    CREATE TABLE `alfoldauto`.`t` ( `a` TINYINT NOT NULL AUTO_INCREMENT , `b` VARCHAR( 10 ) NOT NULL , PRIMARY KEY ( `b` ) ) ENGINE = MYISAM MySQL jelzi: #1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key
    De a válasz is látszik
    Mutasd a teljes hozzászólást!
  • Igen, ezt értem, de nekem is szükségem lenne arra, hogy egy numerikus id értéken keresztül adatokat kapcsoljak egymáshoz. Ha ez az id nem primary, attól még lehet AUTO INCREMENT?
    Mutasd a teljes hozzászólást!
  • Azért "szokták" numerikusra, mert általában az elsődeges kulcs egy idegen kulccsal kapcsolódásra szolgál.

    Akkor meg minél rövidebb a mező, annál jobb. (annál gyorsabb a keresés, kisebb az index kezelési feladat (egy beszúrás/törlés esetén,...)

    pl. ha a kulcs 0-255 között lehet, akkor az ugye 1 bájt (számként), de 3 bájt karakteresen.
    65535-ig 2 bájt számként, 5 karakteresen.....

    Ráadásul könnyű numerikus elsődleges kulcsot csinálni, hiszen az adatbázis-kezelők nagy része tud "számolni" egyesével.
    Mutasd a teljes hozzászólást!
  • Hát elvileg lehetne, de azt eddig mindig numerikus értékre alkalmaztam, mert minden forrásban amit olvastam úgy volt. Hát nem vagyok valami nagy SQL guru
    Mutasd a teljes hozzászólást!
  • Ha nem érdekli, hogy változás legyen, akkor el is dobhatja, nem kell kezelnie a hibát.

    Ha meg érdekli, mert akkor pl. updatelni kell, akkor már jó is

    ----
    Dzsoni Vóker
    És nem lehet az a primary key?
    Mutasd a teljes hozzászólást!
  • "kulcs" a primary key


    Amiből tudtommal csak egy lehet Ezért már néztem korábban a on duplicate key update és replace dolgokat, de arra jutottam, hogy nem ez a jó út. Ugyanis nem primary alapján működne, hanem egy másik mezőt kellene ellenőrizni.
    Mutasd a teljes hozzászólást!
  • Vagy csak egy sima insert (duplicate key rész nélkül) és lekezeli a hibaüzenetet kliens oldalon
    Mutasd a teljes hozzászólást!
  • 1 sql

    mysql_query("insert into tábla (kulcs, mezo) values ('",$kulcs."',$adat) on duplicate key update mezo=mezo+$adat")
    "kulcs" a primary key
    Mutasd a teljes hozzászólást!
  • A helyzet az, hogy csak a rekord meglétét kell ellenőrizni és utána ha nincs akkor beszúrni.
    Mutasd a teljes hozzászólást!
  • Tárolt eljárás vs program kód esetén én 3 dolgot szoktam figyelembe venni:

    1. Hova akarom tenni az "üzleti logikát". Tehát nem csak 1 algoritmusnál nézem a problémát, hanem úgy általában az alkalmazás egésze szempontjából. Én szeretem az üzleti logikát egy helyen tudni.

    3. Egy konkrét algoritmus esetén meg azt szoktam nézni, hogy mekkora adat mozgással jár a feladat elvégzése. Ha netán több ezer rekordon kell valamit csinálni úgy, hogy a felhasználói felületen abból nem látszik semmi sem (vagy csak valamilyen összesítés a végén), akkor nem érdemes a sok adatot átrántani a programba, ott feldolgozni és onnan visszaírni a db-be, hanem hatékonyabb a db-ben megoldani.

    3. Tárolt eljárásban egyáltalán mennyire hatékony a megoldás.
    Mutasd a teljes hozzászólást!
  • Feladattól függ.

    Ha pl. a rekord tartalma saját magától függően változik, akkor az sql if-el is megoldható.

    Ha sok rekordok közötti vizsgálat, akkor lehet, hogy gyorsabb a php.
    Mutasd a teljes hozzászólást!
  • Kicsit pontosabban: be akarok vinni egy sort a táblába, de az értéknek van egy relation mezőben kapcsolata egy másik értékkel.

    Ellenőrzöm, hogy ez a másik érték szerepel-e a táblában, ha igen, akkor az id-jét beteszem a relation mezőbe. Ha nem, akkor hozzáadom (INSERT), és a LAST INSERT ID-t teszem bele a mezőbe.
    Mutasd a teljes hozzászólást!
  • Üdv!

    A cím nem teljesen írja le a témát, ezt el kell ismernem, de legalább rövid és "mutatós".

    A kérdésem az lenne, hogy ha úgy akarok adatokat bevinni egy táblába, hogy közben a táblából kiolvasott adatoktól nagyban függenek a bevitt adatok, akkor melyik a jobb megoldás:

    1. MySQL függvénnyel vagy procedúrával véghezvinni az adatfelvételt.
    2. Kiolvasni a szükséges inputot, PHP-vel feldolgozni, és utána megint csak SQL parancsokkal bevinni a táblába az adatokat.

    Vagyis arra lennék kíváncsi, hogy ha adott dolgot több query-vel érek el, az jelent plusz terhelést az adatbázisszervernek? (Adott select és insert szám mellett.)

    Mert PHP-vel sokkal egyszerűbb lenne ellenőrizni az adatokat, viszont gondolom az elméletileg lassabb megoldás.

    Nem tudom, hogy ez így mennyier érthető de jó lenne, ha valaki hozzászólna.
    Mutasd a teljes hozzászólást!
Ez a téma lezárásra került a moderátor által. A lezárás oka: V�gtelen �r�mmel t�ltene el benn�nket, ha konkr�t k�rd�sedet a Tud�st�rban vetn�d fel.
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd