php 中带有扭曲的随机数生成器

Random number generator in php with twist

目前我正在为学校开发一个 php Projekt。 它包括客户和员工。我想将一名员工分配给自动创建帐户的客户,但不应允许所有客户只有一名员工。 它甚至应该分开。因此,例如,有 2 名员工和 10 名客户,每名员工应该有 5 名客户,而不是 3 / 7 等。

我不知何故知道如何随机化,但分布是问题所在。 代码现在看起来像这样:

<?php
    //1. Verbindungsaufbau
    $nm = $_POST['nm'];
    $pw = $_POST['pw'];
    $name= $_POST['name'];
    $vname = $_POST['vname'];
    $email = $_POST['email'];
try{
    $pdo = new PDO('mysql:host=localhost;dbname=gold-market_main', 'root', '');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e) {
    echo $e->getMessage();
    die();
}
    
    $query = $pdo->query('SELECT MAX(kundenNr) AS sum FROM kunden');

    $r = $query->fetch(PDO::FETCH_ASSOC);
    $sum = $r['sum'];

    $kundenMAX = $sum + 1;
 
    $sql = "INSERT INTO kunden VALUES ('$kundenMAX', '$nm', '$pw','$name','$vname','$email',$emp)";
    $count = $pdo->exec($sql);

  
    if ($count > 0) {
        echo "<div>Der Datensatz wurde erfolgreich gespeichert</div>";
    } else {
        echo "<div>Der Datensatz konnte nicht gespeichert werden</div>";
    }

    //4. Verbindungsabbau
    $pdo = null;
?>

Table:

-- phpMyAdmin SQL Dump
-- version 4.7.2
-- https://www.phpmyadmin.net/
--
-- Host: localhost:3306
-- Erstellungszeit: 28. Mai 2022 um 19:05
-- Server-Version: 10.5.12-MariaDB-0+deb11u1
-- PHP-Version: 7.1.33

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Datenbank: `gold-market_main`
--

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `mitarbeiter`
--

CREATE TABLE `mitarbeiter` (
  `mitarbeiterNr` int(11) NOT NULL,
  `m_name` varchar(45) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `m_vorname` varchar(45) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `m_benutzername` varchar(45) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `m_passwort` varchar(45) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Daten für Tabelle `mitarbeiter`
--

INSERT INTO `mitarbeiter` (`mitarbeiterNr`, `m_name`, `m_vorname`, `m_benutzername`, `m_passwort`) VALUES
(1, 'Dickins', 'Chad', 'dickie123', '1234');

--
-- Indizes der exportierten Tabellen
--

--
-- Indizes für die Tabelle `mitarbeiter`
--
ALTER TABLE `mitarbeiter`
  ADD PRIMARY KEY (`mitarbeiterNr`);
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

第二个Table:

-- phpMyAdmin SQL Dump
-- version 4.7.2
-- https://www.phpmyadmin.net/
--
-- Host: localhost:3306
-- Erstellungszeit: 28. Mai 2022 um 19:05
-- Server-Version: 10.5.12-MariaDB-0+deb11u1
-- PHP-Version: 7.1.33

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Datenbank: `gold-market_main`
--

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `kunden`
--

CREATE TABLE `kunden` (
  `kundenNr` int(11) NOT NULL,
  `k_nutzername` varchar(45) DEFAULT '''NULL''',
  `k_passwort` varchar(45) DEFAULT 'NULL',
  `k_name` varchar(45) DEFAULT NULL,
  `k_nachname` varchar(45) DEFAULT NULL,
  `k_email` varchar(45) DEFAULT NULL,
  `mitarbeiterNr` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Daten für Tabelle `kunden`
--

INSERT INTO `kunden` (`kundenNr`, `k_nutzername`, `k_passwort`, `k_name`, `k_nachname`, `k_email`, `mitarbeiterNr`) VALUES
(1, 'aToMike', '1234', 'Mike', 'Thomson', 'thomson@mike.com', 1),
(2, 'gabriel.test', 'test12', 'Gabriel', 'Test', 'gabriel@test.de', 1);

--
-- Indizes der exportierten Tabellen
--

--
-- Indizes für die Tabelle `kunden`
--
ALTER TABLE `kunden`
  ADD PRIMARY KEY (`kundenNr`),
  ADD KEY `fk_persoenlicheDaten_mitarbeiter1_idx` (`mitarbeiterNr`);

--
-- Constraints der exportierten Tabellen
--

--
-- Constraints der Tabelle `kunden`
--
ALTER TABLE `kunden`
  ADD CONSTRAINT `fk_persoenlicheDaten_mitarbeiter1` FOREIGN KEY (`mitarbeiterNr`) REFERENCES `mitarbeiter` (`mitarbeiterNr`) ON DELETE NO ACTION ON UPDATE NO ACTION;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;


使用此 sql 命令,您可以获得分配了最少客户数量的员工 ID

SELECT mitarbeiterNr, count(*) AS mitarbeiterCount FROM kunden GROUP BY mitarbeiterNr ORDER BY mitarbeiterCount ASC LIMIT 1

$result = mysqli_query($conn, $sql);
$emp= mysqli_fetch_array($result);
$emp[0]; // Outputs 2